http://uoj.ac/problem/187

每个点只能从时间,b+a,b-a三维都不大于它的点转移过来,将点按时间分成尽量少的一些段,每段内三维同时非严格单调,每段内的点可能因为连续选一段而产生平方的贡献,可以每段开一个单调栈维护斜率优化dp处理。

注意到b-a和b+a同时小于可以推出时间小于,因此可以按b-a升序处理,b+a一维用树状数组维护前缀最值,处理选的点在时间上不连续的情况。

#include<bits/stdc++.h>
typedef long long i64;
const int N=5e5+;
int _(){
int x=,c=getchar();
while(c<)c=getchar();
while(c>)x=x*+c-,c=getchar();
return x;
}
int n,xs[N],xp=,idp=;
i64 f[N],bit[N],ans=;
void maxs(i64&a,i64 b){if(a<b)a=b;}
void ins(int x,i64 y){
for(;x<=xp;x+=x&-x)maxs(bit[x],y);
}
i64 sum(int x){
i64 y=;
for(;x;x-=x&-x)maxs(y,bit[x]);
return y;
}
i64 F(int x){
return f[x]+i64(x)*x;
}
int mem[N],*mp=mem;
struct mq{
int*q,p;
void init(int sz){
q=mp,mp+=sz;
p=-;
}
void upd(int i){
int K=*i+;
while(p>){
int a=q[p],b=q[p-];
if(F(b)-F(a)>=K*i64(b-a))--p;
else break;
}
if(p>=){
int w=q[p],d=i+-w;
maxs(f[i],f[w]+i64(d)*d-);
}
while(p>){
int a=q[p-],b=q[p];
i64 Fb=F(b);
if((Fb-F(a))*(i-b)<=(F(i)-Fb)*(b-a))--p;
else break;
}
q[++p]=i;
}
}qs[N];
struct pos{
int x,y,id,tp;
void init(int a,int b,int c){
xs[++xp]=x=a;
y=b;
id=c;
}
void upd(){
f[id]=+sum(x);
qs[tp].upd(id);
ins(x,f[id]);
}
bool operator<(const pos&p)const{
return y<p.y||y==p.y&&x<p.x;
}
bool operator<=(const pos&p)const{
return x<=p.x&&y<=p.y;
}
}ps[N];
int main(){
n=_();
for(int i=;i<=n;++i){
int a=_(),b=_();
ps[i].init(b+a,b-a,i);
}
for(int i=,j=;i<=n;i=j){
for(++j;j<=n&&ps[j-]<=ps[j];++j);
for(qs[++idp].init(j-i);i<j;ps[i++].tp=idp);
}
std::sort(xs+,xs+xp+);
for(int i=;i<=n;++i){
ps[i].x=std::lower_bound(xs+,xs+xp+,ps[i].x)-xs;
}
std::sort(ps+,ps+n+);
for(int i=;i<=n;++i)ps[i].upd();
for(int i=;i<=n;++i)maxs(ans,f[i]);
printf("%lld\n",ans);
return ;
}

uoj#187. 【UR #13】Ernd的更多相关文章

  1. UOJ 188 【UR #13】Sanrd——min_25筛

    题目:http://uoj.ac/problem/188 令 \( s(n,j)=\sum\limits_{i=1}^{n}[min_i>=p_j]f(j) \) ,其中 \( min_i \) ...

  2. uoj#188. 【UR #13】Sanrd(Min_25筛)

    题面 传送门 题解 这是一道语文题 不难看出,题目所求即为\(l\)到\(r\)中每个数的次大质因子 我们考虑\(Min\_25\)筛的过程,设 \[S(n,j)=\sum_{i=1}^nsec_p( ...

  3. UOJ #188. 【UR #13】Sanrd

    Description 给定 \(\sum_{i=l}^r f[i]\) \(f[i]=\) 把 \(i\) 的每一个质因子都从小到大排列成一个序列(\(p_i^{c_i}\)要出现 \(c_i\) ...

  4. 「uoj#188. 【UR #13】Sanrd」

    题目 不是很能看懂题意,其实就是求\([l,r]\)区间内所有数的次大质因子的和 这可真是看起来有点鬼畜啊 这显然不是一个积性函数啊,不要考虑什么特殊的函数了 我们考虑Min_25筛的过程 设\(S( ...

  5. uoj#186 【UR #13】Yist

    题目 orz myy 首先注意到答案有单调性,于是我们可以考虑二分一个\(x\),之后去判断一下每次只使用长度为\(x\)的区间能否删出目标序列 显然我们应该贪心地删除需要删除元素中最小的那一个,感性 ...

  6. UOJ 241. 【UR #16】破坏发射台 [矩阵乘法]

    UOJ 241. [UR #16]破坏发射台 题意:长度为 n 的环,每个点染色,有 m 种颜色,要求相邻相对不能同色,求方案数.(定义两个点相对为去掉这两个点后环能被分成相同大小的两段) 只想到一个 ...

  7. uoj #118. 【UR #8】赴京赶考 水题

    #118. [UR #8]赴京赶考 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/118 Description ...

  8. uoj #31. 【UR #2】猪猪侠再战括号序列 贪心

    #31. [UR #2]猪猪侠再战括号序列 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/31 Descript ...

  9. [UOJ 74] 【UR #6】破解密码

    题目链接:UOJ - 74 题目分析 题目中,将字符串 S 的第一个字符移到末尾,其他字符向前移动一个位置,f(S) 就从 Hi 变成了 Hi+1. 我们分析一下这个过程:假设第一个字符为 c, (H ...

随机推荐

  1. resNet代码-小象/cv

    C:\yyy\ml\dengsong\ChinaHadoop\ChinaHadoop_C4-master\ChinaHadoop_C4-master\C4_ResNet_TF http://blog. ...

  2. vim 的编辑模式 命令模式

    1.vim的编辑模式    进入编辑模式 按键: a  i  o a: 表示在光标当前的,后面开始插入,写数据 i : 则表示 前面 . o : 表面在光标当前的,下一行开始写入数据. O : 大写的 ...

  3. PTA——统计区间内质数

    PTA 7-33 统计素数并求和 #include<stdio.h> #include<math.h> int prime(int p); int main() { int m ...

  4. cenos7.0 安装docker

    使用yum命令在线安装  yum install docker 安装后查看Docker版本 docker -v启动docker:systemctl start docker停止docker:syste ...

  5. 【java编程】Java魔法类:Unsafe应用解析

    转载来源:https://tech.meituan.com/2019/02/14/talk-about-java-magic-class-unsafe.html 前言 Unsafe是位于sun.mis ...

  6. jenkins 使用smtp2http 邮件服务,扩展灵活的构建通知功能

    smtp2http 是一个很方便的可以将smtp 转换为http 服务的工具,同时也支持扩展的开发,我们可以使用此工具 扩展灵活的ci.cd 生命周期管理,而不是简单的邮件处理 备注: 使用docke ...

  7. jquery trigger函数和triggerHandler函数的对照

    一句话的差别就是:trigger will bubbling jQuery events (not default DOM events) and triggerHnadler will not do ...

  8. Percona XtraDB Cluster高可用与状态快照传输(PXC 5.7 )

    Percona XtraDB Cluster(下称PXC)高可用集群支持任意节点在运行期间的重启,升级或者意外宕机,即它解决了单点故障问题.那在这个意外宕机或者重启期间,该节点丢失的数据如何再次进行同 ...

  9. spring boot 2 返回Date 格式化问题

    以前 返回数据把Date  转成 long的时间毫秒数.现在是格式化成了字符串. 默认的结果:"createDate": "2018-09-06T10:04:25.000 ...

  10. PyCharm 设置Python 文件头部模板

    1. 菜单栏-> File -> Settings -> Editor -> File and Code Templates ->Python Script 2.配置头文 ...