Submission #671742

#TimeUsernameProblemLanguageResultExecution timeMemory
671742LittleCubeGlobal Warming (CEOI18_glo)C++14
100 / 100
175 ms8008 KiB
#include <bits/stdc++.h> #define ll long long #define plll tuple<ll, ll, ll> using namespace std; int n, d, a[200005], b[200005], bit[400005], dp[200005][2]; void modify(int pos, int val) { for (int i = pos; i <= 2 * n; i += (i & -i)) bit[i] = max(bit[i], val); } int query(int pos) { int res = 0; for (int i = pos; i > 0; i -= (i & -i)) res = max(res, bit[i]); return res; } signed main() { cin >> n >> d; vector<int> v; for (int i = 1; i <= n; i++) { cin >> a[i]; v.emplace_back(a[i]); v.emplace_back(a[i] + d); } sort(v.begin(), v.end()); for (int i = 1; i <= n; i++) { b[i] = lower_bound(v.begin(), v.end(), a[i] + d) - v.begin() + 1; a[i] = lower_bound(v.begin(), v.end(), a[i]) - v.begin() + 1; } for (int i = 1; i <= n; i++) { dp[i][0] = query(a[i] - 1) + 1; modify(a[i], dp[i][0]); } for (int i = 1; i <= 2 * n; i++) bit[i] = 0; for (int i = 1; i <= n; i++) { dp[i][1] = query(b[i] - 1) + 1; modify(a[i], dp[i][0]); modify(b[i], dp[i][1]); } int ans = 0; for(int i = 1; i <= n; i++) ans = max({ans, dp[i][0], dp[i][1]}); 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...