BZOJ5442: [Ceoi2018]Global warming
BZOJ5442: [Ceoi2018]Global warming
https://lydsy.com/JudgeOnline/problem.php?id=5442
分析:
- 等价于后缀加(前缀减也可以转化成后缀加)。
 - 求\(L_i\)表示\(i\)这个位置被加了\(x\)与前面的\(lis\),\(R_i\)表示后缀加\(x\)后的\(lis\)。
 
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
using namespace std;
#define N 400050
int V[N],n,X,a[N],c[N],L[N],R[N],ln,f[N];
void fix(int x,int v) {
	for(;x<=ln;x+=x&(-x)) c[x]=max(c[x],v);
}
int inq(int x) {
	int re=0;
	for(;x;x-=x&(-x)) re=max(re,c[x]); return re;
}
void fix2(int x,int v) {
	for(;x;x-=x&(-x)) c[x]=max(c[x],v);
}
int inq2(int x) {
	int re=0;
	for(;x<=ln;x+=x&(-x)) re=max(re,c[x]); return re;
}
int main() {
	scanf("%d%d",&n,&X);
	int i;
	for(i=1;i<=n;i++) scanf("%d",&a[i]);
	for(i=1;i<=n;i++) a[i+n]=a[i]+X;
	ln=n<<1;
	for(i=1;i<=ln;i++) V[i]=a[i];
	sort(V+1,V+ln+1);
	int cnt=unique(V+1,V+ln+1)-V-1;
	for(i=1;i<=ln;i++) a[i]=lower_bound(V+1,V+cnt+1,a[i])-V;
	for(i=1;i<=n;i++) {
		L[i]=inq(a[i+n]-1)+1;
		f[i]=inq(a[i]-1)+1;
		fix(a[i],f[i]);
	}
	memset(c,0,sizeof(c));
	for(i=n;i;i--) {
		f[i]=inq2(a[i]+1)+1;
		fix2(a[i],f[i]);
	}
	int ans=0;
	for(i=1;i<=n;i++) ans=max(ans,L[i]+f[i]);
	printf("%d\n",ans-1);
}
												
											BZOJ5442: [Ceoi2018]Global warming的更多相关文章
- [CEOI2018]Global warming
		
[CEOI2018]Global warming 题目大意: 给定\(n(n\le2\times10^5)\),你可以将任意\(a_{l\sim r}(1\le l\le r\le n)\)每一个元素 ...
 - BZOJ 5442: [Ceoi2018]Global warming
		
[l,r]+x不如[l,n]+x [l,r]-x不如(r,n)+x 所以等价于只有[l,n]+x 枚举断点树状数组合并 难度在于想到这个贪心 #include<cstdio> #inclu ...
 - 10324 Global Warming dfs + 二分
		
时间限制:1000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC Description Global warming is a big prob ...
 - 【BZOJ4149】[AMPPZ2014]Global Warming 单调栈+RMQ+二分
		
[BZOJ4149][AMPPZ2014]Global Warming Description 给定一个序列a[1],a[2],...,a[n].请从中选出一段连续子序列,使得该区间最小值唯一.最大值 ...
 - bzoj4149: [AMPPZ2014]Global Warming
		
头都烂了怎么头疼啊 考虑先做出对于一个位置以它作为唯一最小值的最远区间,这个可以单调栈上二分搞出来 那么对于一个位置这个区间而言,一定是选择这个区间的最大数是作为最终的唯一最大数最优的 为什么呢?我们 ...
 - Emergency(山东省第一届ACM省赛)
		
Emergency Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Kudo’s real name is not Kudo. H ...
 - Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
		
A. As Easy As Possible 每个点往右贪心找最近的点,可以得到一棵树,然后倍增查询即可. 时间复杂度$O((n+m)\log n)$. #include <bits/stdc+ ...
 - sentence patterns
		
第四部分 推理题 1.世界上每个角落的每个人都有立场,都有背景,都有推理性,能推理出一个人语言的真意,才成就了真正的推理能力: 2.换言之,如果你能通过一个人的说话推理出其身份职业,你的推理能 ...
 - AMPPZ2014
		
[AMPPZ2014]The Lawyer 记录每天结束的最早的会议以及开始的最晚的会议即可. #include<cstdio> #define N 500010 int n,m,i,d, ...
 
随机推荐
- GitHub 小试牛刀(踩坑记录)
			
首先要在GitHub上创建好远程仓库,把README,LISCENCE,.gitignore三个文件在远程仓库初始化好. 然后在创建本地仓库,先要cd到自己的项目目录下,然后: $ git init ...
 - how to add them, how to multiply them
			
http://www.physics.miami.edu/~nearing/mathmethods/operators.pdf
 - zabbix 主机组管理
			
分组的目的是将同一属性的主机归类,主机组中可以包含主机,也可以包含模板 建议:同一属性的主机或者模板,尽量归纳到分组中方便以后管理.分组原则如下: 以地理位置进行划分 以业务划分 以机器用途划分 以系 ...
 - [luogu3393]逃离僵尸岛
			
[luogu3393]逃离僵尸岛 luogu 先把被禁止的点和新建的虚点n+1连0边 跑最短路,dis<=s的点价格为Q,否则为P, 再建图跑最短路 #define ll long long # ...
 - centos 安装 jdk PostgreSQL
			
1.下载: anzhuang jDK http://blog.csdn.net/youzhouliu/article/details/51183115 ----------------------- ...
 - [转载]Java集合容器简介
			
Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...
 - 关于date和String互相转换的问题
			
其实原理很简单,就是将String类型的变量使用SimpleDateFormat来转换成Date,然后用getTime()方法比较 SimpleDateFormat sdf = new SimpleD ...
 - ZOJ - 3705 Applications 【模拟】
			
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3705 题意 给出N个队员 然后一个教练要从中选择 M名队员 要选 ...
 - python spark
			
http://blog.jobbole.com/86232/ 1. 安装lib 材料: spark : http://spark.apache.org/downloads.html hadoop : ...
 - css3条纹边框效果
			
在线演示 本地下载