제출 #1324017

#제출 시각아이디문제언어결과실행 시간메모리
1324017sh_qaxxorov_571Global Warming (CEOI18_glo)C++20
100 / 100
123 ms5192 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int MAXN = 400005; int tree[MAXN]; void update(int i, int val, int n) { for (; i <= n; i += i & -i) tree[i] = max(tree[i], val); } int query(int i) { int res = 0; for (; i > 0; i -= i & -i) res = max(res, tree[i]); return res; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, x; cin >> n >> x; vector<int> t(n); vector<int> coords; for (int i = 0; i < n; i++) { cin >> t[i]; coords.push_back(t[i]); coords.push_back(t[i] + x); } sort(coords.begin(), coords.end()); coords.erase(unique(coords.begin(), coords.end()), coords.end()); auto get_id = [&](int val) { return lower_bound(coords.begin(), coords.end(), val) - coords.begin() + 1; }; int m = coords.size(); vector<int> R(n); vector<int> tails; for (int i = n - 1; i >= 0; i--) { auto it = lower_bound(tails.begin(), tails.end(), t[i], greater<int>()); int pos = it - tails.begin(); if (it == tails.end()) tails.push_back(t[i]); else *it = t[i]; R[i] = pos + 1; } int ans = 0; for (int i = 0; i < n; i++) { ans = max(ans, query(get_id(t[i] + x) - 1) + R[i]); int cur_l = query(get_id(t[i]) - 1) + 1; update(get_id(t[i]), cur_l, m); ans = max(ans, cur_l); } cout << ans << endl; 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...