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 ...
随机推荐
- 20155208徐子涵 2016-2017-2 《Java程序设计》第9周学习总结
20155208徐子涵 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 撰写应用程序是利用通信协议对数据库进行指 ...
- python django day 5 database 1
from django.db import models class Blog(models.Model): name = models.CharField(max_length=) tagline ...
- oracle 日常
oracle sql server select 1 from dual 和 select 1 nvl(null,0) 为空显示 0 greatest (1, 3, 2 ) ...
- (20)jQuery的文档操作(创建,添加、设置样式和删除等)
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>jq ...
- 安装部署redis3.2 phpRedisAdmin 攻略
1.下载redis3.2稳定版本: 下载地址: https://redis.io/download 2.安装: 解压文件后,进行文件夹: 执行以下命令: make cd src make insta ...
- python-基础-文件
一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件, 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 打开文件的模式有: r ,只读模式[默认模式 ...
- python------模块定义、导入、优化 ------->Yaml, l模块
一. yaml模块 用来做配置文件. 需要pip安装该包. 二. ConfigParser模块 用来生成和修改常见配置文件,在python3.x版本中更名为configparser. (什么是配置文件 ...
- LA3485 Bridge
题意 PDF 分析 以<训练指南>上的分析为准. 二分法时间复杂度\(O(\log v)\) 代码 #include<bits/stdc++.h> #define rg reg ...
- Nio使用Selector客户端与服务器的通信
使用NIO的一个最大优势就是客户端于服务器自己的不再是阻塞式的,也就意味着服务器无需通过为每个客户端的链接而开启一个线程.而是通过一个叫Selector的轮循器来不断的检测那个Channel有消息处理 ...
- js 时间戳和日期互转
// 获取当前时间戳(以s为单位) var timestamp = Date.parse(new Date()); timestamp = timestamp / 1000; //当前时间戳为:140 ...