首先把相同的事件点合并,那么每个点有时间$t_i$,位置$x_i$,价值$v_i$。

考虑DP,设$f_i$表示按时间从小到大考虑每个事件,目前位于事件$i$的时间与位置时,最多能让多少个事件发生。在$t_i$秒初对方不能碰到$i$,但在这一秒结束结算时,对方可以碰到$i$。

则$f_i=\max(f_j)+v_i$。

其中,$j$需要满足一系列条件:

$1.j$要能在规定时间内到达$i$,也就是$t_i-t_j\geq|x_i-x_j|$。

将绝对值拆掉并移项,得:

$t_i-x_i\geq t_j-x_j(1)$

$t_i+x_i\geq t_j+x_j(2)$

$2.$在$t_i$秒初对方不能碰到$i$:

设$s_i$表示前$i$秒存在的事件数,那么在第$t_i$秒初,也就是第$t_i-1$秒末,对方一共前进了$s_{t_i-1}-f_j$步,所以$s_{t_i-1}-f_j<x_i$,即$f_j>s_{t_i-1}-x_i(3)$。

$3.j$在移动到$i$的过程中不能被对方追上:

最坏情况下,一定是$j$在$t_j$时刻位于$x_j$,然后一直向右移动,那么在第$p(t_j\leq p<t_i)$秒末,对方位于$s_p-f_j$,$j$位于$x_j-t_j+p$,需要满足:

$s_p-f_j<x_j-t_j+p$

移项得:

$s_p-p<x_j-t_j+f_j$

即$\max(s_p-p)<x_j-t_j+f_j$

对$s_p-p$建线段树维护区间最大值,然后在线段树上二分即可得到最大的$o$,满足$[t_j,o)$都不会被追上,设$lim_j=o$,则$lim_j\geq t_i(4)$。

对于限制$(3)$,只需要求出最大的$f_j$,然后判断是否可行即可。

对于限制$(1)$,可以通过排序解决。

对于限制$(2)$和$(4)$,可以cdq分治后扫描线+树状数组处理。

时间复杂度$O(n\log^2n)$。

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100010,M=262150,inf=10000000;
int Case,_,n,m,cnt,i,j,ans;
int pt[N],post[N],s[N],w[N],val[N],lim[N],f[N];
int qa[N],qb[N],ca,cb;
int FLAG,bit[N],vis[N];
int mx[M],O,OFFSET;
struct P{int t,x,v;P(){}P(int _t,int _x,int _v){t=_t,x=_x,v=_v;}}a[N],b[N];
inline bool cmpa(const P&a,const P&b){return a.t==b.t?a.x<b.x:a.t<b.t;}
inline bool cmpb(const P&a,const P&b){
if(a.t-a.x!=b.t-b.x)return a.t-a.x<b.t-b.x;
return a.t+a.x<b.t+b.x;
}
inline bool cmpq(int x,int y){
return val[x]<val[y];
}
inline int lower(int x){
int l=1,r=m,mid,t;
while(l<=r)if(pt[mid=(l+r)>>1]<=x)l=(t=mid)+1;else r=mid-1;
return t;
}
inline void up(int&x,int y){x<y?(x=y):0;}
inline void add(int x,int p){for(;x<=m;x+=x&-x)if(vis[x]<FLAG)vis[x]=FLAG,bit[x]=p;else up(bit[x],p);}
inline void ask(int&t,int x){for(;x;x-=x&-x)if(vis[x]==FLAG)up(t,bit[x]);}
void build(int x,int a,int b){
if(a==b){
mx[x]=w[a];
return;
}
int mid=(a+b)>>1;
build(x<<1,a,mid);
build(x<<1|1,mid+1,b);
mx[x]=max(mx[x<<1],mx[x<<1|1]);
}
void getr(int x,int a,int b,int c){
if(c<=a){
if(mx[x]<OFFSET)return;
if(a==b){
O=a;
return;
}
}
int mid=(a+b)>>1;
if(c<=mid){
getr(x<<1,a,mid,c);
if(O)return;
}
getr(x<<1|1,mid+1,b,c);
}
inline void getlim(int x){
int offset=b[x].x+f[x]-b[x].t;
lim[x]=0;
int t=post[x];
if(w[t]>=offset)return;
O=0;
OFFSET=offset;
getr(1,1,m,t);
if(!O)O=m;
lim[x]=O;
}
void CDQ(int l,int r){
if(l==r){
if(b[l].t==0)up(f[l],0);
if(f[l]<=s[post[l]-1]-b[l].x)f[l]=-inf;
if(f[l]>=0){
f[l]+=b[l].v;
up(ans,f[l]);
getlim(l);
}
return;
}
int mid=(l+r)>>1;
CDQ(l,mid);
int i,j;
ca=cb=0;
for(i=l;i<=mid;i++)if(f[i]>=0&&lim[i])qa[++ca]=i;
for(i=r;i>mid;i--)qb[++cb]=i;
sort(qa+1,qa+ca+1,cmpq);
sort(qb+1,qb+cb+1,cmpq);
FLAG++;
for(i=j=1;i<=cb;i++){
while(j<=ca&&val[qa[j]]<=val[qb[i]]){
add(m-lim[qa[j]]+1,f[qa[j]]);
j++;
}
ask(f[qb[i]],m-post[qb[i]]+1);
}
CDQ(mid+1,r);
}
inline void solve(){
sort(a+1,a+m+1,cmpa);
for(cnt=0,i=1;i<=m;i=j){
for(j=i;j<=m&&a[i].t==a[j].t&&a[i].x==a[j].x;j++);
b[++cnt]=P(a[i].t,a[i].x,j-i);
if(b[cnt].t==0)b[cnt].v=0;
}
sort(b+1,b+cnt+1,cmpb);
for(i=1;i<=cnt;i++)pt[i]=b[i].t;
sort(pt+1,pt+cnt+1);
for(m=0,i=1;i<=cnt;i++)if(i==1||pt[i]>pt[i-1])pt[++m]=pt[i];
for(i=1;i<=cnt;i++)post[i]=lower(b[i].t);
for(i=1;i<=m;i++)s[i]=0;
for(i=1;i<=cnt;i++)s[post[i]]+=b[i].v;
for(i=1;i<=m;i++)s[i]+=s[i-1];
for(i=1;i<=m;i++)w[i]=s[i]-pt[i];
for(i=1;i<=cnt;i++)f[i]=-inf,val[i]=b[i].t+b[i].x;
build(1,1,m);
CDQ(1,cnt);
}
int main(){
scanf("%d",&Case);
for(_=1;_<=Case;_++){
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)scanf("%d%d",&a[i].t,&a[i].x);
a[++m]=P(0,1,0);
ans=0;
if(m)solve();
printf("Case #%d: %d\n",_,ans);
}
}

  

FZU2279 : Cantonese的更多相关文章

  1. 粵語/廣東話/Cantonese 資料/Material

    一.粵語歌詞網 1.海闊天空(粵語) 歌詞 今天我 寒夜裡看雪飄過 gam1 tin1 ngo5 hon4 je6 leoi5 hon3 syut3 piu1 gwo3 懷著冷卻了的心窩漂遠方 waa ...

  2. [No00007E]2016-面经[中]

    目录: 写一份动人简历的九个步奏 英文简历必备的十大元素 写一份动人简历的九个步骤 写一份动人的简历可以算得上是找工作最难的部分之一,但是,通过下面九步,这件事不再那么难了. 简历定位.雇主们之所以花 ...

  3. So many many foods here!

    水果类(fruits):西红柿 tomato 菠萝 pineapple 西瓜watermelon 香蕉banana 柚子 shaddock (pomelo) 橙子orange 苹果apple 柠檬le ...

  4. Diet

    Dialogue 1   Healthy diet 关于健康饮食 F:Bob, look at this sentence. 'Healthy eating is not about strict n ...

  5. Linux 安装ibus极点五笔输入法备忘录

    Linux 安装 ibus 五笔输入法备忘录 useful?: https://github.com/definite/ibus-table-chinese 一. yum install ibus* ...

  6. SQL-三级分类查询

    /*SQLyog 企业版 - MySQL GUI v8.14 MySQL - 5.5.40 : Database - appinfodb******************************** ...

  7. From missionary to firebrand--Eisle Tu [20160102]

    From missionary to firebrand   杜叶锡恩(1913年(癸丑年)-2015年(乙未年),英文名字Elsie Hume Elliot Tu,丈夫是教育家杜学魁.她是香港著名的 ...

  8. TTS 文字转语音 ekho

    1.源码下载 使用svn客户端,执行如下命令下载 svn co https://svn.code.sf.net/p/e-guidedog/code/ 2.官方网站查看说明 http://www.egu ...

  9. Heroku + Node.js + HTTPS

    昨天把 biz-to-me 升级到支持 HTTPS 了,为此研究了一下如何让 Heroku 上跑的 Node.js 应用支持 HTTPS.我发现并没有任何文章描述这个具体的流程,只有零碎的信息,所以在 ...

随机推荐

  1. 一脸懵逼学习Hive的使用以及常用语法(Hive语法即Hql语法)

    Hive官网(HQL)语法手册(英文版):https://cwiki.apache.org/confluence/display/Hive/LanguageManual Hive的数据存储 1.Hiv ...

  2. 次小生成树(POJ1679/CDOJ1959)

    POJ1679 首先求出最小生成树,记录权值之和为MinST.然后枚举添加边(u,v),加上后必形成一个环,找到环上非(u,v)边的权值最大的边,把它删除,计算当前生成树的权值之和,取所有枚举加边后生 ...

  3. IDEA上创建 Maven SpringBoot+mybatisplus+thymeleaf 项目

    概述 在WEB领域,Java也是在不断的探索和改进,从开始的JSP--->Struts1--->Struts2+Spring--->Spring MVC--->SpringBo ...

  4. 优化 Markdown 在 Notepad++ 中的使用体验

    选择一个强大而好用的文本编辑器,是进行 Web 开发和编程必不可少的一部分,甚至对于通常的写作,一个舒服的文本编辑器也会让你写起文字来觉得优雅而潇洒.Sublime Text 是一款不错的编辑器,简洁 ...

  5. Nessus忘记密码的解决

    进入到Nessus安装目录下

  6. BZOJ3262/洛谷P3810 陌上花开 分治 三维偏序 树状数组

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672131.html 题目传送门 - BZOJ3262 题目传送门 - 洛谷P3810 题意 有$n$个元素,第 ...

  7. react 性能优化

    React 最基本的优化方式是使用PureRenderMixin,安装工具 npm i react-addons-pure-render-mixin --save,然后在组件中引用并使用 import ...

  8. CNN:人工智能之神经网络算法进阶优化,六种不同优化算法实现手写数字识别逐步提高,应用案例自动驾驶之捕捉并识别周围车牌号—Jason niu

    import mnist_loader from network3 import Network from network3 import ConvPoolLayer, FullyConnectedL ...

  9. 【python】常用第三方模块

    No1: [Pillow]图像处理标准库 缩放 from PIL import Image # 打开一个jpg图像文件,注意是当前路径: im = Image.open('test.jpg') # 获 ...

  10. Apache系列:Apache的全局配置

    配置文件组成: 整个配置文件由3段组成: (1)全局配置:对主服务器或虚拟机都有效,且有些功能是服务器自身工作属性: (2)主服务器:主站属性: (3)虚拟主机:虚拟主机及属性定义 注:第二段和第三段 ...