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 ...
随机推荐
- centos7 启动mysql
密码无法登录问题: 在my.cnf 中加一句 skip-grant-tables : 重启mysql服务: mysql -uroot -p: USE mysql ; 进入后,修改密码 .UPDA ...
- HDU 2023 求平均成绩
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU ...
- (20)jQuery的文档操作(创建,添加、设置样式和删除等)
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>jq ...
- sql表连接方式
表连接有几种? sql表连接分成外连接.内连接和交叉连接. 一.外连接 概述: 外连接包括三种,分别是左外连接.右外连接.全外连接. 对应的sql关键字:LEFT/RIGHT/FULL OUTER ...
- openresty router && template 试用
router 是一个比较方便的 openresty 路由组件,我们可以用来编写灵活强大的 web 应用,类似的 lua-resty-route 也是很不错的,但是如果是比较简单的直接可以使用 lu ...
- tile38 复制配置
基于复制我们可以保证tile38 server 的ha 环境准备 docker-compose 文件 说明里面多了一个webhook 的服务,可以不用管 version: "3" ...
- phpdocumentor安装和使用总结
为了解决一校友在安装和使用phpDocumentor过程中遇到的问题,自己闲时也折腾了一下这个东西,总结见下: 一.定义: 自己刚听到这个词时还不知道这个是什么东西,干啥用的,就去百度了一下,说道: ...
- oracle-srvctl-output
############################## [grid@rac01 ~]$ crsctl query crs administratorCRS Administrator List: ...
- Bartender 使用 Excel xlsx 数据库时出现 0x800A0E7A
Bartender 使用 Excel 数据库时出现 0x800A0E7A 这是因为没有装 数据库驱动的原因. 安装微软的驱动就可以. 注意是安装 32 位的驱动. https://www.micros ...
- java考试感受
开学不久,我们进行了一次java程序考试.在此之前,老师要求我们在假期自学java并提前发了一个考试样卷,要求用数组编写一个学生信息管理系统并能够实现一系列的功能.由于我早早的便完成了这道题.因此对这 ...