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的更多相关文章

  1. [CEOI2018]Global warming

    [CEOI2018]Global warming 题目大意: 给定\(n(n\le2\times10^5)\),你可以将任意\(a_{l\sim r}(1\le l\le r\le n)\)每一个元素 ...

  2. BZOJ 5442: [Ceoi2018]Global warming

    [l,r]+x不如[l,n]+x [l,r]-x不如(r,n)+x 所以等价于只有[l,n]+x 枚举断点树状数组合并 难度在于想到这个贪心 #include<cstdio> #inclu ...

  3. 10324 Global Warming dfs + 二分

    时间限制:1000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC Description Global warming is a big prob ...

  4. 【BZOJ4149】[AMPPZ2014]Global Warming 单调栈+RMQ+二分

    [BZOJ4149][AMPPZ2014]Global Warming Description 给定一个序列a[1],a[2],...,a[n].请从中选出一段连续子序列,使得该区间最小值唯一.最大值 ...

  5. bzoj4149: [AMPPZ2014]Global Warming

    头都烂了怎么头疼啊 考虑先做出对于一个位置以它作为唯一最小值的最远区间,这个可以单调栈上二分搞出来 那么对于一个位置这个区间而言,一定是选择这个区间的最大数是作为最终的唯一最大数最优的 为什么呢?我们 ...

  6. Emergency(山东省第一届ACM省赛)

    Emergency Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Kudo’s real name is not Kudo. H ...

  7. Moscow Pre-Finals Workshop 2016. National Taiwan U Selection

    A. As Easy As Possible 每个点往右贪心找最近的点,可以得到一棵树,然后倍增查询即可. 时间复杂度$O((n+m)\log n)$. #include <bits/stdc+ ...

  8. sentence patterns

    第四部分     推理题 1.世界上每个角落的每个人都有立场,都有背景,都有推理性,能推理出一个人语言的真意,才成就了真正的推理能力: 2.换言之,如果你能通过一个人的说话推理出其身份职业,你的推理能 ...

  9. AMPPZ2014

    [AMPPZ2014]The Lawyer 记录每天结束的最早的会议以及开始的最晚的会议即可. #include<cstdio> #define N 500010 int n,m,i,d, ...

随机推荐

  1. 经过两个多月的攻关,终于搞定了live555多线程并稳定压测通过

    live555已经发展了十几年了,不得不钦佩作者坚持不懈的奉献和国外的开源生态环境,live555可以说是大部分的安防从业者的入门之选,尤其是在嵌入式或者Linux系统上,其应用还是蛮广泛的,主要是其 ...

  2. POJ 2092 Grandpa is Famous【水---找出现第二多的数】

    链接: http://poj.org/problem?id=2092 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27454#probl ...

  3. nginx学习之反向代理篇(六)

    在本节,你将学会: --如何根据不同的协议,将请求转发到后端服务器: --修改发送到后端服务器的请求头: --以及配置是否buffering从后端服务器返回来的响应. 1. 将请求转发给后端服务器 当 ...

  4. Android5.0以后版本把应用移动到SD或者TF卡的方法

    由于手机内存较小,才8G,用的时间一久,内部存储就满了,天天删垃圾,WIFI还老断线,终于忍无可忍了,决定把应用移动到SD卡,实践下来,只有少部分App默认支持移动到SD卡,大部分程序不支持只能装在内 ...

  5. PAT 1063. 计算谱半径(20)

    在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界.换言之,对于给定的n个复数空间的特征值{a1+b1i, ..., an+bni},它们的模为实部与虚部的平方和的开方,而“谱半径”就是最大模. ...

  6. 使用JSTL在页面前的空行怎么去除?

    解决的方法是:在每个JSP的头上加上一段代码   <%@ page trimDirectiveWhitespaces="true" %>

  7. C#使用SQL语句时候的万用密码问题

    实际上万用密码就是因为SQL里面的语句--是注释,利用bug添加用户名和密码. 例如,用户名为 adada’ or 1=1-- 第一个种写法登录成功了 第二种写法登录失败(正确) 第三种写法登录失败( ...

  8. oldboyshell编程扩展内容

    oldboyshell编程扩展内容一.命令的优先级 命令分为: ==> alias ==> Compound Commands ==> function  ==> build_ ...

  9. appium 移动web样例脚本

    简单介绍 这是一个使用appium操作移动端chrome浏览器的样例程序. 样例程序 脚本实现的功能是:打开浏览器-->跳转到百度首页-->输入appium-->点击搜索按钮--&g ...

  10. Ubuntu15.10下***搭建及GUI客户端安装

    1.依赖包安装 sudo apt-get install python-pip python-dev build-essential sudo pip install pip sudo apt-get ...