제출 #1008029

#제출 시각아이디문제언어결과실행 시간메모리
1008029vjudge1Global Warming (CEOI18_glo)C++17
100 / 100
616 ms50296 KiB
#include <bits/stdc++.h> #define maxn 500000 using namespace std; int seg[4*maxn]; map<int,int> pos; set<int> s; int n,x; int t[maxn]; void clear(int id,int l,int r) { seg[id]=0; if(l==r) return; int mid=(l+r)/2; clear(id*2+1,l,mid); clear(id*2+2,mid+1,r); } int query(int id,int l,int r,int x,int y) { if(x<=l && r<=y) return seg[id]; if(y<l || r<x) return 0; int mid=(l+r)/2; return max(query(id*2+1,l,mid,x,y),query(id*2+2,mid+1,r,x,y)); } void update(int id,int l,int r,int p,int v) { seg[id]=max(seg[id],v); if(l==r) return; int mid=(l+r)/2; if(p<=mid) update(id*2+1,l,mid,p,v); else update(id*2+2,mid+1,r,p,v); } int pref[maxn]; int suf[maxn]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>x; for(int i=1;i<=n;i++) { cin>>t[i]; s.insert(t[i]); s.insert(t[i]-x); } int id=0; for(auto v:s) { pos[v]=id++; } clear(0,0,maxn); for(int i=1;i<=n;i++) { pref[i]=1+query(0,0,maxn,0,pos[t[i]]-1); update(0,0,maxn,pos[t[i]],pref[i]); } clear(0,0,maxn); for(int i=n;i>=1;i--) { suf[i]=1+query(0,0,maxn,pos[t[i]]+1,maxn); update(0,0,maxn,pos[t[i]],suf[i]); } clear(0,0,maxn); int ans=0; for(int i=1;i<=n;i++) { ans=max(ans,suf[i]+query(0,0,maxn,0,pos[t[i]]-1)); update(0,0,maxn,pos[t[i]-x],pref[i]); } cout<<ans<<endl; 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...