uoj#187. 【UR #13】Ernd
每个点只能从时间,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的更多相关文章
- 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 \) ...
- uoj#188. 【UR #13】Sanrd(Min_25筛)
题面 传送门 题解 这是一道语文题 不难看出,题目所求即为\(l\)到\(r\)中每个数的次大质因子 我们考虑\(Min\_25\)筛的过程,设 \[S(n,j)=\sum_{i=1}^nsec_p( ...
- UOJ #188. 【UR #13】Sanrd
Description 给定 \(\sum_{i=l}^r f[i]\) \(f[i]=\) 把 \(i\) 的每一个质因子都从小到大排列成一个序列(\(p_i^{c_i}\)要出现 \(c_i\) ...
- 「uoj#188. 【UR #13】Sanrd」
题目 不是很能看懂题意,其实就是求\([l,r]\)区间内所有数的次大质因子的和 这可真是看起来有点鬼畜啊 这显然不是一个积性函数啊,不要考虑什么特殊的函数了 我们考虑Min_25筛的过程 设\(S( ...
- uoj#186 【UR #13】Yist
题目 orz myy 首先注意到答案有单调性,于是我们可以考虑二分一个\(x\),之后去判断一下每次只使用长度为\(x\)的区间能否删出目标序列 显然我们应该贪心地删除需要删除元素中最小的那一个,感性 ...
- UOJ 241. 【UR #16】破坏发射台 [矩阵乘法]
UOJ 241. [UR #16]破坏发射台 题意:长度为 n 的环,每个点染色,有 m 种颜色,要求相邻相对不能同色,求方案数.(定义两个点相对为去掉这两个点后环能被分成相同大小的两段) 只想到一个 ...
- uoj #118. 【UR #8】赴京赶考 水题
#118. [UR #8]赴京赶考 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/118 Description ...
- uoj #31. 【UR #2】猪猪侠再战括号序列 贪心
#31. [UR #2]猪猪侠再战括号序列 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/31 Descript ...
- [UOJ 74] 【UR #6】破解密码
题目链接:UOJ - 74 题目分析 题目中,将字符串 S 的第一个字符移到末尾,其他字符向前移动一个位置,f(S) 就从 Hi 变成了 Hi+1. 我们分析一下这个过程:假设第一个字符为 c, (H ...
随机推荐
- (17)什么是jQuery(jq的流程和基本操作)
jQuery就是对原生js二次封装的工具类(在jq叫构造函数) jQuery就是一堆方法的集合,jq对象就可以直接调用这些方法来完成指定的需求 使用jq的流程: 1.在HTML页面倒入jq.js文件 ...
- Python中元组、列表、字典的遍历和相互转化
一.元组,列表,字典的遍历 1.1 元组的遍历 元组的遍历借助 range() 函数,基本思想是通过元组的长度使用for循环进行遍历,代码如下: fruits=("apple&quo ...
- 使用prometheus+ grafana+nginx-module-vts 模块监控openresty
nginx-module-vts 是一个很不错的nginx 模块,我们可以用来,方便的分析系统的请求状态 同时支持基于prometheus 的监控, 我参考openresty 的docker镜像已 ...
- C# 键盘响应事件及键值对照表
键盘响应事件总结 键盘响应事件是在用户按下某个键后触发的事件,可以是任意操作,但不是任意键都可以被捕获的. 原型:public event KeyPressEventHandler KeyPress ...
- RTP RTCP RTSP
1.RTP over UDP和RTP over RTSP有什么区别?2.RTP over RTSP是不是就是RTP over TCP?3.RTP over TCP 打包视频是不是要加4个字节的头,是 ...
- 腾讯云 COS 对象存储使用
目前使用腾讯云的对象存储cos服务,将本地的文件同步到cos中,看了腾讯云的用户文档,发现使用COS Migration 工具还是挺适合的. 原因 因为服务器已经安装有java环境,而cos的几个用户 ...
- revit api 使用过滤器
1. Door在Revit里面的element类型是FamilyInstance. 2. Door在Revit里面的category类型是OST_Doors. 3. 想要过滤特定类型的element需 ...
- docker 的前台模式和后台模式
Detached(后台模式) vs foreground(前台模式) 当我们启动一个容器时,首先需要确定这个容器是运行在前台还是运行在后台. -d, --detach Run container in ...
- 使用 RSA 非对称加密保证数据不被篡改 java 例子代码
原理: 对原始数据 生成有序的json 字符串,然后取 摘要,然后 对摘要 进项 分对称加密.( 不对原数据加密是应为 原数据太大,加解密速度太慢,非对称加密都不 挺慢的.在摘要函数具有雪崩效应 ,原 ...
- python时间戳转时间
import time timestamp = 1462451334 #转换成localtime time_local = time.localtime(timestamp) #转换成新的时间格式(2 ...