Submission #1152130

#TimeUsernameProblemLanguageResultExecution timeMemory
1152130AlgorithmWarriorGlobal Warming (CEOI18_glo)C++20
100 / 100
87 ms4308 KiB
#include <bits/stdc++.h> using namespace std; int const MAX=2e5+5; int const INF=2e9+5; int v[MAX]; int n,d; void read(){ cin>>n>>d; int i; for(i=1;i<=n;++i) cin>>v[i]; } int bin_search_mic(int v[],int n,int val){ int st=0,dr=n; while(dr-st>1){ int mij=(st+dr)/2; if(v[mij]<=val) dr=mij; else st=mij; } return dr; } int bin_search_mare(int v[],int n,int val){ int st=0,dr=n; while(dr-st>1){ int mij=(st+dr)/2; if(v[mij]>=val) dr=mij; else st=mij; } return dr; } int incr[MAX]; int vmin[MAX]; void find_increasing(){ int i; for(i=1;i<=n;++i) vmin[i]=INF; vmin[0]=-INF; for(i=1;i<=n;++i){ incr[i]=bin_search_mare(vmin,n,v[i]+d); int pos=bin_search_mare(vmin,n,v[i]); vmin[pos]=v[i]; } } int decr[MAX]; int vmax[MAX]; void find_decreasing(){ int i; for(i=1;i<=n;++i) vmax[i]=-INF; vmax[0]=INF; for(i=n;i;--i){ int pos=bin_search_mic(vmax,n,v[i]); decr[i]=pos; vmax[pos]=v[i]; } } void maxself(int& x,int val){ if(x<val) x=val; } int solve(){ int maxim=0; int i; for(i=1;i<=n;++i) maxself(maxim,incr[i]+decr[i]-1); return maxim; } int main() { read(); find_increasing(); find_decreasing(); cout<<solve(); 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...