제출 #1309005

#제출 시각아이디문제언어결과실행 시간메모리
1309005ppmn_6Global Warming (CEOI18_glo)C++20
27 / 100
39 ms4256 KiB
#include "bits/stdc++.h" using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); // https://codeforces.com/blog/entry/79148 class Timer: chrono::high_resolution_clock { const time_point start_time; public: Timer(): start_time(now()) {} rep elapsed_time() const { return chrono::duration_cast<chrono::milliseconds>(now() - start_time).count(); } } timer; int main() { cin.tie(0); ios::sync_with_stdio(0); int n, x, ans = 0; cin >> n >> x; vector<int> a(n); vector<pair<int, int>> op(n); vector<int> dp1, dp2; for (int i = 0; i < n - 1; i++) { cin >> a[i]; auto it = lower_bound(dp1.begin(), dp1.end(), a[i]); if (it != dp1.end()) { op[i] = {it - dp1.begin(), *it}; *it = a[i]; } else { op[i] = {-1, -1}; dp1.push_back(a[i]); } } cin >> a[n - 1]; for (int i = n - 1; i > 0; i--) { auto it = lower_bound(dp2.begin(), dp2.end(), -a[i]); if (it != dp2.end()) { *it = -a[i]; } else { dp2.push_back(-a[i]); } int res = lower_bound(dp1.begin(), dp1.end(), -(dp2.back() - x)) - dp1.begin(); ans = max(ans, int(res + dp2.size())); res = lower_bound(dp2.begin(), dp2.end(), -(dp1.back() - x)) - dp2.begin(); ans = max(ans, int(res + dp1.size())); if (op[i].first == -1) { dp1.pop_back(); } else { dp1[op[i].first] = op[i].second; } } cout << ans; 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...