Submission #444378

#TimeUsernameProblemLanguageResultExecution timeMemory
444378keta_tsimakuridzeGlobal Warming (CEOI18_glo)C++14
100 / 100
1532 ms27364 KiB
#include<bits/stdc++.h> #define f first #define s second #define int long long using namespace std; const int N=2e5+5,mod=1e9+7; int t,tree[4*N],R[N],L[N],a[N],b[N],n,x; map<int,int> ind; int getans(int u,int start,int end,int l,int r) { if(l>end || r<start) return 0 ; if(start<=l && r<=end) return tree[u]; int mid = (l+r)/2; return max(getans(2*u,start,end,l,mid),getans(2*u+1,start,end,mid+1,r)); } void update(int u,int ind,int l,int r,int val) { if(l>ind || r<ind) return; if(l==r) { tree[u] = val; return; } int mid = (l+r)/2; update(2*u,ind,l,mid,val); update(2*u+1,ind,mid+1,r,val); tree[u] = max(tree[2*u],tree[2*u+1]); } main(){ cin>>n>>x; for(int i=1;i<=n;i++){ cin >> a[i]; b[i] = a[i]; } sort(b+1,b+n+1); int idx = 0; for(int i = 1; i<=n; i++) { if(b[i] != b[i-1]) idx++; ind[b[i]] = idx; } for(int i=n;i>=1;i--) { R[i] = getans(1,ind[a[i]]+1,n,1,n) + 1; update(1,ind[a[i]],1,n,R[i]); } int ans = 0; for(int i=1;i<=4*n;i++) tree[i] = 0; for(int i=1;i<=n;i++) { L[i] = getans(1,1,ind[a[i]]-1,1,n) + 1; int l = 1, r = n,c = 0; while(l<=r) { int mid = (l+r)/2; if(b[mid] < a[i] + x) { c = mid; l = mid + 1; } else r = mid - 1; } c = ind[b[c]]; ans = max(ans, getans(1,1,c,1,n) + R[i]); update(1,ind[a[i]],1,n,L[i]); } for(int i=1;i<=4*n;i++) tree[i] = 0; ind[0] = n + 1; for(int i = n; i>=1; i--) { int l = 1, r = n, c= 0; while(l<=r) { int mid = (l+r)/2; if(b[mid] > a[i] - x) { r = mid - 1; c = mid; } else l = mid + 1; } c = ind[b[c]]; ans = max(ans,getans(1,c,n,1,n) + L[i]); update(1,ind[a[i]],1,n,R[i]); } cout<<ans; }

Compilation message (stderr)

glo.cpp:26:2: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   26 |  main(){
      |  ^~~~
#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...