Submission #1129642

#TimeUsernameProblemLanguageResultExecution timeMemory
1129642alecurseGlobal Warming (CEOI18_glo)C++20
10 / 100
216 ms7176 KiB
#include <iostream> #include <vector> #include <algorithm> #include <assert.h> using namespace std; int reals=1; vector<int> tree; void add(int k, int x, int y, int l, int r, int val) { if(y<=l||x>=r) return; if(x>=l&&y<=r) { tree[k]=val; return; } int d = (x+y)/2; add(k*2,x,d,l,r,val); add(k*2+1,d,y,l,r,val); tree[k]=max(tree[k*2],tree[k*2+1]); } int getmax(int k, int x, int y, int l, int r) { if(y<=l||x>=r) return 0; if(x>=l&&y<=r) { return tree[k]; } int d = (x+y)/2; return max(getmax(k*2,x,d,l,r),getmax(k*2+1,d,y,l,r)); } bool comp(pair<int,int> &a, pair<int,int> &b) { if(a.first==b.first) { return a.second>b.second; } return a.first<b.first; } int main() { // freopen("input.txt","r",stdin); // freopen("output.txt","w",stdout); int N,X; cin>>N>>X; assert(X==0); vector<int> dp(N); vector<int> v(N); vector<pair<int,int> > vtosort(N); for(int i=0;i<N;i++) { cin>>v[i]; vtosort[i].first=v[i]; vtosort[i].second=i; } sort(vtosort.begin(),vtosort.end(),comp); vector<int> indexes(N); for(int i=0;i<N;i++) { indexes[vtosort[i].second]=i; } while(reals<N) reals*=2; tree.resize(reals*2); for(int i=0;i<N;i++) { int maxbef = getmax(1,0,reals,0,indexes[i]); dp[i]=maxbef+1; add(1,0,reals,indexes[i],indexes[i]+1,dp[i]); } // int maxres=0; // for(int i=0;i<N;i++) { // maxres=max(maxres,dp[i]); // } tree.clear(); tree.resize(reals*2); vector<int> newdp(N); for(int i=N-1;i>=0;i--) { int maxbef = getmax(1,0,reals,indexes[i],reals); newdp[i]=maxbef+1; add(1,0,reals,indexes[i],indexes[i]+1,newdp[i]); } int maxres=0; for(int i=0;i<N;i++) { maxres=max(maxres,newdp[i]); } cout<<maxres; }
#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...