「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\) 个敌人,每一个敌人的坐标为 ...
 
随机推荐
- 渗透测试之nmap
			
一,功能介绍 Nmap是网络连接端口扫描软件,用来扫描网上电脑开放的哪些连接端口,并且确定哪些服务运行在哪些端口连接,推断是哪个操作系统,他是网络管理员必备的软件之一,以及用于评估网络系统安全. 二, ...
 - drf ( 学习第四部 )
			
目录 DRF框架中常用的组件 分页Pagination 异常处理Exceptions 自动生成接口文档 安装依赖 设置接口文档访问路径 访问接口文档网页 Admin 列表页配置 详情页配置 Xadmi ...
 - Luban图片压缩
			
导入依赖: implementation 'top.zibin:Luban:1.1.3' public class MainActivity extends AppCompatActivity { p ...
 - Eureka整合sidecar异构调用
			
本次使用nodejs脚本生成的异构程序测试: node-server.js var http = require('http'); var url = require('url'); var path ...
 - vue-cli3搭建的vue项目中使用jquery
			
装包:npm install jquery --save 方式一 全局使用 1)main.js中引入 // jquery import $ from 'jquery' Vue.prototype.$ ...
 - APIO2008免费道路
			
题目大意 给定一张n个点m条边的图,图上有两种边,求保证有k条第一种边的情况下的最小生成树 传送门 题解 考虑最小生成树kruskal算法 先找到不含限制的最小生成树,然后就可以知道哪些第一种边是必选 ...
 - nb-iot技术实现跟踪功能的应用
			
在互联网和连接的世界里,nb-iot风靡一时.企业和个人正在利用nb-iot技术和nb-iot设备的可靠,快速连接能力,对其技术系统进行渐进式更改,并创建一个互联的"智能"世界. ...
 - Servlet学习笔记(四)
			
目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...
 - 1到n整数中1出现的次数
			
1到n整数中1出现的次数 题目描述 输入一个整数n, 求1~n这n个整数的十进制表示中1出现的次数. 例如, 输入12, 1~12这些整数中包含1的数字有1, 10, 11和12, 1一共出现了4次 ...
 - Java_面向对象三大特征
			
面向对象特征 面向对象三大特征: 继承, 封装, 多态 继承 继承: 子类可以从父类继承属性和方法 对外公开某些属性和方法 要点(eclipse中Ctrl+T查看继承结构) 1.父类也称超类, 基类, ...