Submission #1084339

#TimeUsernameProblemLanguageResultExecution timeMemory
1084339serpent_121Global Warming (CEOI18_glo)C++17
100 / 100
78 ms7668 KiB
#include <iostream> #include <vector> #include <string> #include <algorithm> #include <map> #include <unordered_map> #include <set> #include <queue> #include <numeric> #include <cmath> #include <cstring> #include <climits> #include <stack> #include <bitset> typedef long long ll; using namespace std; const ll MAXN = 2*1e5 + 5; ll t[MAXN]; int main(){ ll n,x; cin >> n >> x; for ( int i = 0; i<n; i++) cin >> t[i]; vector<ll> s; ll lis = 0; ll dp[n]; for (int i = n-1; i>=0; i--) { ll l=0; ll r = lis; while (l < r) { ll mid = (l+r)/2; if (s[mid]<=t[i]) r = mid; else l = mid+1; } if (r==lis) {s.push_back(t[i]);lis++;} else { s[r] = t[i]; } dp[i] = r; } vector<ll> l; lis = 0; ll ans = 0; for (int i = 0; i<n; i++) { ll pos1 = lower_bound(l.begin(),l.end(),t[i]+x) - l.begin(); ll pos = lower_bound(l.begin(),l.end(),t[i]) - l.begin(); ans = max(ans, pos1 + dp[i] + 1); if (pos==lis) { lis++; l.push_back(t[i]); } else l[pos] = t[i]; } cout << ans; }
#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...