Submission #546443

#TimeUsernameProblemLanguageResultExecution timeMemory
546443aryan12Global Warming (CEOI18_glo)C++17
100 / 100
69 ms8360 KiB
#include <bits/stdc++.h> using namespace std; #define int long long mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count()); void Solve() { int n, d; cin >> n >> d; vector<int> a(n + 1); for(int i = 1; i <= n; i++) { cin >> a[i]; } vector<int> dp(n, 1e18); dp[0] = a[1]; vector<int> pref(n + 1, 0); pref[1] = 1; int ans = 1; for(int i = 2; i <= n; i++) { int pos = lower_bound(dp.begin(), dp.end(), a[i]) - dp.begin(); pref[i] = pos + 1; dp[pos] = a[i]; ans = max(ans, pos + 1); } /*for(int i = 1; i <= n; i++) { cout << pref[i] << " "; } cout << "\n";*/ dp = vector<int> (n + 1, 1e18); for(int i = n; i > 0; i--) { //increaseing suffix from 1...i, therefore i+1...n have to be in lds int cur_val = -a[i] + d; //cout << "cur_val = " << cur_val << "\n"; int pos = lower_bound(dp.begin(), dp.end(), cur_val) - dp.begin(); ans = max(ans, pref[i] + pos); pos = lower_bound(dp.begin(), dp.end(), cur_val - d) - dp.begin(); dp[pos] = cur_val - d; } cout << ans << "\n"; } int32_t main() { auto begin = std::chrono::high_resolution_clock::now(); ios_base::sync_with_stdio(0); cin.tie(0); int t = 1; //cin >> t; while(t--) { Solve(); } auto end = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin); cerr << "Time measured: " << elapsed.count() * 1e-9 << " seconds.\n"; 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...