zoukankan      html  css  js  c++  java
  • 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
    ",ans-1);
    }
    
    
    
  • 相关阅读:
    背景透明,文字不透明
    判断数组类型
    前端工作流程自动化——Grunt/Gulp 自动化
    tools安装
    总结
    CSS Hack
    getBoundingClientRect()兼容性处理
    Math.random获得随机数
    spring RestTemplate 工程导入
    系统架构演变
  • 原文地址:https://www.cnblogs.com/suika/p/10092972.html
Copyright © 2011-2022 走看看