Submission #921818

#TimeUsernameProblemLanguageResultExecution timeMemory
921818StefanSebezGlobal Warming (CEOI18_glo)C++14
100 / 100
715 ms36976 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int N=6*1e6+50; const ll inf=1e9+50; int root,nc,maks[N],lc[N],rc[N]; int pref[200050],suf[200050]; ll a[200050]; void Update(int &c,ll ss,ll se,int qind,int qval) { if(!c) c=++nc; if(ss==se) {maks[c]=max(maks[c],qval);return;} ll mid=(ss+se)/2;if(ss+se<0) mid--; if(qind<=mid) Update(lc[c],ss,mid,qind,qval); else Update(rc[c],mid+1,se,qind,qval); maks[c]=max(maks[lc[c]],maks[rc[c]]); } int Get(int c,ll ss,ll se,ll qs,ll qe) { if(qs>qe || !c) return 0; if(qs<=ss && se<=qe) return maks[c]; if(qe<ss || se<qs) return 0; ll mid=(ss+se)/2;if(ss+se<0) mid--; return max(Get(lc[c],ss,mid,qs,qe),Get(rc[c],mid+1,se,qs,qe)); } void CLEAR(){ for(int i=0;i<=nc;i++) maks[i]=lc[i]=rc[i]=0; root=nc=0; } int main() { int n;ll x;scanf("%i%lld",&n,&x); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); for(int i=1;i<=n;i++) { pref[i]=1+Get(root,0,inf,0,a[i]-1); Update(root,0,inf,a[i],pref[i]); } CLEAR(); for(int i=n;i>=1;i--) { suf[i]=1+Get(root,0,inf,a[i]+1,inf); Update(root,0,inf,a[i],suf[i]); } CLEAR(); /*for(int i=1;i<=n;i++) printf("%i ",pref[i]); printf("\n"); for(int i=1;i<=n;i++) printf("%i ",suf[i]); printf("\n");*/ int res=0; for(int i=1;i<=n;i++) { res=max(res,Get(root,0,2*inf,0,a[i]+x-1)+suf[i]); Update(root,0,2*inf,a[i],pref[i]); //printf("%i %i\n",i,res); } CLEAR(); for(int i=n;i>=1;i--) { res=max(res,pref[i]+Get(root,0,2*inf,a[i]+1,2*inf)); Update(root,0,2*inf,a[i]+x,suf[i]); } printf("%i\n",res); return 0; }

Compilation message (stderr)

glo.cpp: In function 'int main()':
glo.cpp:32:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   32 |     int n;ll x;scanf("%i%lld",&n,&x);
      |                ~~~~~^~~~~~~~~~~~~~~~
glo.cpp:33:32: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   33 |     for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
      |                           ~~~~~^~~~~~~~~~~~~~
#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...