제출 #1234128

#제출 시각아이디문제언어결과실행 시간메모리
1234128justGlobal Warming (CEOI18_glo)C++20
100 / 100
38 ms4352 KiB
#include "bits/stdc++.h" using namespace std; #define vec vector #define int long long #define all(x) (x).begin(), (x).end() const int mod = 1e9 + 7; const int inf = 1e18; signed main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, x; cin >> n >> x; vec<int> a(n); for (int &x: a) cin >> x; vec<int> lis_from(n); vec<int> cur; cur.reserve(n); for (int i = n - 1; i >= 0; i--) { if (cur.empty() || a[i] < cur.back()) { cur.push_back(a[i]); lis_from[i] = cur.size(); } else { int l = 0, r = cur.size() - 1; int ans = r; while (l <= r) { int mid = l + (r - l) / 2; if (cur[mid] <= a[i]) ans = mid, r = mid - 1; else l = mid + 1; } cur[ans] = a[i]; lis_from[i] = ans + 1; } } // for (int i = 0; i < n; i++) cerr << lis_from[i] << ' '; // cerr << '\n'; int ans = 0; cur.clear(); for (int i = 0; i < n; i++) { int q = a[i] + x; if (cur.empty() || q > cur.back()) ans = max(ans, lis_from[i] + (int)cur.size()); else { int len = lower_bound(all(cur), q) - cur.begin(); ans = max(ans, len + lis_from[i]); } if (cur.empty() || a[i] > cur.back()) cur.push_back(a[i]); else *lower_bound(all(cur), a[i]) = a[i]; } cout << ans << '\n'; }
#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...