「LOJ 3153」 「JOI Open 2019」三级跳
题面
solution
- 对于任意一对\(A,B\),若区间\([A,B]\)中存在一个数权值大于\(A\)或\(B\),则用这个数来替代\(A\)或\(B\)显然更优。
- 故只需要考虑每一个区间的最大值与次大值分别作为\(A,B\)。
- 可以用单调栈\(O(n)\)找到每一对这样的\(A,B\)。
- 考虑\(f[i]\)表示以\(i\)作为\(C\)时最大的\(A+B+C\),对于每一对\(A,B\),他们对应的\(C\)一定\(\ge (2*B-A)\)。
- 离线处理询问,从大到小枚举\(A\),线段树区间修改即可
code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*f;
}
#define lc (p<<1)
#define rc (p<<1|1)
const int N=5e5+10;
int n,a[N],q;
ll ans[N];
stack<int>s;
vector<int> B[N];
vector<pair<int,int> >que[N];
struct tree{
ll mx,lazy,v;
}T[N<<2];
inline void pushup(int p){
T[p].mx=max(T[lc].mx,T[rc].mx);
}
inline void pushdown(int p){
if(!T[p].lazy) return;
T[lc].lazy=max(T[lc].lazy,T[p].lazy);
T[lc].mx=max(T[lc].mx,T[p].lazy+T[lc].v);
T[rc].lazy=max(T[rc].lazy,T[p].lazy);
T[rc].mx=max(T[rc].mx,T[p].lazy+T[rc].v);
T[p].lazy=0;
}
inline void build(int p,int l,int r){
if(l==r){
T[p].v=a[l];
return ;
}
int mid=(l+r)>>1;
build(lc,l,mid);
build(rc,mid+1,r);
T[p].v=max(T[lc].v,T[rc].v);
}
inline void update(int p,int l,int r,int ql,int qr,ll v){
if(ql<=l&&r<=qr){
T[p].lazy=max(T[p].lazy,v);
T[p].mx=max(T[p].mx,v+T[p].v);
return ;
}
pushdown(p);
int mid=(l+r)>>1;
if(ql<=mid) update(lc,l,mid,ql,qr,v);
if(qr>mid) update(rc,mid+1,r,ql,qr,v);
pushup(p);
}
inline ll query(int p,int l,int r,int ql,int qr){
if(ql<=l&&r<=qr){
return T[p].mx;
}
pushdown(p);
int mid=(l+r)>>1;
ll ret=0;
if(ql<=mid) ret=max(ret,query(lc,l,mid,ql,qr));
if(qr>mid) ret=max(ret,query(rc,mid+1,r,ql,qr));
return ret;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
while((!s.empty())&&a[s.top()]<a[i]) B[s.top()].push_back(i),s.pop();
if(!s.empty()) B[s.top()].push_back(i);
s.push(i);
}
build(1,1,n);
scanf("%d",&q);
for(int i=1;i<=q;++i){
int l,r;
scanf("%d%d",&l,&r);
que[l].push_back(make_pair(r,i) );
}
for(int i=n;i>=1;--i){
for(int j=0;j<B[i].size();++j){
int t=B[i][j];
if(t*2-i<=n) update(1,1,n,t*2-i,n,a[i]+a[t]);
}
for(int j=0;j<que[i].size();++j){
pair<int,int> p=que[i][j];
ans[p.second]=query(1,1,n,i,p.first);
}
}
for(int i=1;i<=q;++i)
printf("%lld\n",ans[i]);
return 0;
}
「LOJ 3153」 「JOI Open 2019」三级跳的更多相关文章
- LOJ#3054. 「HNOI 2019」鱼
LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...
- LOJ #3049. 「十二省联考 2019」字符串问题
LOJ #3049. 「十二省联考 2019」字符串问题 https://loj.ac/problem/3049 题意:给你\(na\)个\(A\)类串,\(nb\)个\(B\)类串,\(m\)组支配 ...
- LOJ#2351. 「JOI 2018 Final」毒蛇越狱
LOJ#2351. 「JOI 2018 Final」毒蛇越狱 https://loj.ac/problem/2351 分析: 首先有\(2^{|?|}\)的暴力非常好做. 观察到\(min(|1|,| ...
- 【LOJ】#3051. 「十二省联考 2019」皮配
LOJ#3051. 「十二省联考 2019」皮配 当时我在考场上觉得这题很不可做... 当然,出了考场后再做,我还是没发现学校和城市是可以分开的,导致我还是不会 事实上,若一个城市投靠了某个阵营,学校 ...
- 「ZJOI2019」&「十二省联考 2019」题解索引
「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...
- 【LOJ#6066】「2017 山东一轮集训 Day3」第二题(哈希,二分)
[LOJ#6066]「2017 山东一轮集训 Day3」第二题(哈希,二分) 题面 LOJ 题解 要哈希是很显然的,那么就考虑哈希什么... 要找一个东西可以表示一棵树,所以我们找到了括号序列. 那么 ...
- 「WC 2019」数树
「WC 2019」数树 一道涨姿势的EGF好题,官方题解我并没有完全看懂,尝试用指数型生成函数和组合意义的角度推了一波.考场上只得了 44 分也暴露了我在数数的一些基本套路上的不足,后面的 \(\ex ...
- 「LOJ 556 Antileaf's Round」咱们去烧菜吧
「LOJ 556 Antileaf's Round」咱们去烧菜吧 最近在看 jcvb 的生成函数课件,顺便切一切上面讲到的内容的板子题,这个题和课件上举例的背包计数基本一样. 解题思路 首先列出答案的 ...
- [LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC
[LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC 试题描述 九条可怜是一个爱玩游戏的女孩子. 最近她在玩一个无双割草类的游戏,平面上有 \(n\) 个敌人,每一个敌人的坐标为 ...
随机推荐
- 基于SSH框架的人力资源管理系统设计与实现
- - ->关注博主公众号[C you again],获取更多IT资源(IT技术文章,毕业设计.课程设计系统源码,经典游戏源码,HTML网页模板,PPT.简历模板,!!还可以投稿赚钱!!,点击查 ...
- CPU上下文
CPU上下文 包括CPU寄存器和程序计数器(Program Counter,PC). CPU寄存器,是CPU内置的容量小.但速度极快的内存. 程序计数器,是用来存储CPU正在执行的指令位置.或者即将执 ...
- 从创建进程到进入main函数,发生了什么?
前几天,读者群里有小伙伴提问:从进程创建后,到底是怎么进入我写的main函数的? 今天这篇文章就来聊聊这个话题. 首先先划定一下这个问题的讨论范围:C/C++语言 这篇文章主要讨论的是操作系统层面上对 ...
- Scipy 学习第3篇:数字向量的距离计算
计算两个数字向量u和v之间的距离函数 1,欧氏距离(Euclidean distance) 在数学中,欧几里得距离或欧几里得度量是欧几里得空间中两点间"普通"(即直线)距离.使用这 ...
- Windows Server 2012 R2 辅助域控制器搭建
Windows Server 2012 R2 辅助域控制器搭建 以下操作都是基于主域已搭建成功的基础上,全程操作过程都是在辅域上操作完成. 地址 主域:10.228.81.207 辅域:10.228. ...
- adb、package及activity
1. adb adb连接手机参考:https://www.cnblogs.com/mind18/p/12592252.html,中的三.5节 1.1. adb介绍 ADB全名Andorid De ...
- 选择API管理平台之前要考虑的5个因素
API(应用程序编程接口)经济的飞速增长导致对API管理平台的需求相应增加. 这些解决方案可在整个生命周期内帮助创建,实施,监控,分析,保护和管理API. 据一些估计,全球API管理市场预计在2018 ...
- Servlet程序访问jsp文件404的一种情况
启动Jsp Run on Server的时候出现404的错误,如下图: 检查一下是否文档目录如下图:jsp应该在WebContent下,而不是WEB_INF下,访问放在WEB_INF下的jsp文件就会 ...
- 14 RPC
14 RPC RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些 ...
- VBA_50段代码总结
'' 30个有用的VBA代码 '目录: '1--合理使用数组:'2--一次保存并关闭所 ...