제출 #706811

#제출 시각아이디문제언어결과실행 시간메모리
706811amirhoseinfar1385Global Warming (CEOI18_glo)C++17
100 / 100
172 ms9292 KiB
#include<bits/stdc++.h> using namespace std; int n,x; vector<int>all,allind; int kaf=(1<<19); struct segment{ int seg[(1<<20)]; segment(){ for(int i=0;i<(1<<20);i++){ seg[i]=0; } } void upd(int i,int w){ if(i==0){ return ; } seg[i]=max(seg[i],w); return upd((i>>1),w); } int pors(int i,int l,int r,int tl,int tr){ if(l>r||l>tr||r<tl){ return 0; } if(l>=tl&&r<=tr){ return seg[i]; } int m=(l+r)>>1; int d=max(pors((i<<1),l,m,tl,tr),pors((i<<1)^1,m+1,r,tl,tr)); return d; } }; segment seg; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>x; all.resize(n); for(int i=0;i<n;i++){ cin>>all[i]; } allind=all; sort(allind.begin(),allind.end()); allind.resize(unique(allind.begin(),allind.end())-allind.begin()); vector<int>dp(n+1); for(int i=0;i<n;i++){ all[i]=-all[i]; } vector<int>v; for(int i=n-1;i>=0;i--){ int p=lower_bound(v.begin(),v.end(),all[i])-v.begin(); if((int)v.size()==p){ v.push_back(all[i]); } else{ v[p]=all[i]; } dp[i]=p+1; // cout<<i<<" "<<dp[i]<<"\n"; } for(int i=0;i<n;i++){ all[i]=-all[i]; } int res=0; for(int i=0;i<n;i++){ int p=upper_bound(allind.begin(),allind.end(),all[i]+x-1)-allind.begin(); p--; int wtf=seg.pors(1,0,kaf-1,0,p); //cout<<i<<" "<<wtf<<" "<<dp[i]<<"\n"; res=max(res,wtf+dp[i]); p=lower_bound(allind.begin(),allind.end(),all[i])-allind.begin(); wtf=seg.pors(1,0,kaf-1,0,p-1); wtf++; seg.upd(kaf+p,wtf); } cout<<res<<"\n"; }
#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...