Submission #839841

#TimeUsernameProblemLanguageResultExecution timeMemory
839841TheUnknownGlobal Warming (CEOI18_glo)C++14
100 / 100
194 ms20944 KiB
#include<bits/stdc++.h> using namespace std; const int maxn=2e5+3,oo=2e9+3; int a[maxn],n,x,subx[maxn],dpfor[maxn],dpback[maxn]; struct segtree { int st[maxn<<3]; void upd(int id,int l,int r,int p,int x) { if(l==r) { st[id]=max(st[id],x); return; } int mid=(l+r)>>1; if(p<=mid) upd(id<<1,l,mid,p,x); else upd(id<<1|1,mid+1,r,p,x); st[id]=max(st[id<<1],st[id<<1|1]); } void update(int p,int x) { upd(1,1,n<<1,p,x); } int gt(int id,int l,int r,int u,int v) { if(r<u||v<l) return 0; if(u<=l&&r<=v) return st[id]; int mid=(l+r)>>1; return max(gt(id<<1,l,mid,u,v),gt(id<<1|1,mid+1,r,u,v)); } int get(int u,int v) { if(u>v) return 0; return gt(1,1,n<<1,u,v); } }forw,backw,save; int main() { ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n>>x; vector<pair<int,int>> cmpress; for(int i=1;i<=n;++i) { cin>>a[i]; subx[i]=a[i]-x; cmpress.push_back({a[i],i}); cmpress.push_back({subx[i],i+maxn}); } sort(cmpress.begin(),cmpress.end()); int currval=-oo,reval=0; for(auto t:cmpress) { if(currval!=t.first) { ++reval; currval=t.first; } if(t.second>maxn) subx[t.second-maxn]=reval; else a[t.second]=reval; } for(int i=1;i<=n;++i) { dpfor[i]=forw.get(1,a[i]-1)+1; forw.update(a[i],dpfor[i]); } for(int i=n;i>0;--i) { dpback[i]=backw.get(a[i]+1,n<<1)+1; backw.update(a[i],dpback[i]); } int ans=0; for(int i=n;i>0;--i) { //cout<<i<<' '<<dpfor[i]<<' '<<save.get(subx[i]+1,n<<1)<<'\n'; ans=max(ans,dpfor[i]+save.get(subx[i]+1,n<<1)); save.update(a[i],dpback[i]); } cout<<ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...