Submission #906429

#TimeUsernameProblemLanguageResultExecution timeMemory
906429NonozeGlobal Warming (CEOI18_glo)C++17
100 / 100
46 ms6620 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int n, x; vector<int> t; int bs(int val, vector<int> &LIS) { int l=0, r=LIS.size()-1; int ans=-1; while (l<=r) { int mid=l+(r-l)/2; if (LIS[mid]>val) { l=mid+1; ans=mid+1; } else { r=mid-1; } } return ans; } void solve() { cin >> n >> x; t.resize(n); for (auto &u: t) cin >> u; vector<int> corr(n, 0); vector<int> LIS; for (int i=n-1; i>=0; i--) { corr[i]=max(0LL, bs(t[i]-x, LIS)); int lb=bs(t[i], LIS); if (lb>=(int)LIS.size() || i==n-1) { LIS.push_back(t[i]); } else if (lb==-1) { LIS[0]=t[i]; } else { LIS[lb]=t[i]; } } int ans=1; LIS.clear(); for (int i=0; i<n; i++) { auto lb=lower_bound(LIS.begin(), LIS.end(), t[i]); if (lb==LIS.end()) { LIS.push_back(t[i]); ans=max(ans, (int)LIS.size()+corr[i]); } else { LIS[lb-LIS.begin()]=t[i]; ans=max(ans, (int)(lb-LIS.begin()+1)+corr[i]); } } cout << ans << endl; return; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); 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...