Submission #1287639

#TimeUsernameProblemLanguageResultExecution timeMemory
1287639paulxaxaGlobal Warming (CEOI18_glo)C++17
100 / 100
93 ms2760 KiB
#include <bits/stdc++.h> #define NMAX 200000 #define LOG 19 #define ll long long int #define MOD 30103 #define INF (ll)1e13 using namespace std; ifstream fin("cod.in"); ofstream fout("cod.out"); int n,x; int a[NMAX+1]; int dp[NMAX+1]; int mx_dr[NMAX+1]; int main() { cin >> n >> x; for(int i=1;i<=n;i++) { cin >> a[i]; } int l=0; for(int i=n;i>=1;i--) { int st=1,dr=l; while(st<=dr) { int m = (st+dr)/2; if(dp[m] > a[i]) { st=m+1; } else { dr=m-1; } } if(dr==l) { dp[++l] = a[i]; } else { dp[dr+1] = a[i]; } mx_dr[i] = dr+1; } for(int i=1;i<=n;i++) { dp[i]=0; } l=0; int res=0; for(int i=1;i<=n;i++) { int st=0,dr=l; while(st<=dr) { int m = (st+dr)/2; if(dp[m] < a[i] + x) { st=m+1; } else { dr=m-1; } } res=max(res, dr + mx_dr[i]); st=0,dr=l; while(st<=dr) { int m = (st+dr)/2; if(dp[m] < a[i]) { st=m+1; } else { dr=m-1; } } if(dr==l) { dp[++l] = a[i]; } else { dp[dr+1] = a[i]; } } cout << res; }
#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...