Submission #927471

#TimeUsernameProblemLanguageResultExecution timeMemory
927471OAleksaGlobal Warming (CEOI18_glo)C++14
10 / 100
28 ms4700 KiB
#include <bits/stdc++.h> using namespace std; #define f first #define s second #define int long long const int N = 2e5 + 69; const int M = 30 * N; const int inf = 1e9 + 69; int n, a[N], x, dp[N]; int st[M], root[N], lc[M], rc[M]; int node; void Modify(int v, int v1, int l, int r, int p, int x) { if (l == r) st[v] = max(st[v1], x); else { int mid = (l + r) / 2; if (p <= mid) { lc[v] = ++node; rc[v] = rc[v1]; Modify(lc[v], lc[v1], l, mid, p, x); } else { rc[v] = ++node; lc[v] = lc[v1]; Modify(rc[v], rc[v1], mid + 1, r, p, x); } st[v] = max(st[lc[v]], st[rc[v]]); } } int Get(int v, int tl, int tr, int l, int r) { if (tl > r || tr < l) return 0; else if (tl >= l && tr <= r) return st[v]; else { int mid = (tl + tr) / 2; return max(Get(lc[v], tl, mid, l, r), Get(rc[v], mid + 1, tr, l, r)); } } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int tt = 1; //cin >> tt; while (tt--) { cin >> n >> x; for (int i = 1;i <= n;i++) cin >> a[i]; int ans = 0; vector<int> dp(n, inf); for (int i = 1;i <= n;i++) { auto u = lower_bound(dp.begin(), dp.end(), a[i]) - dp.begin(); ans += (dp[u] == inf); dp[u] = a[i]; } // fill(dp.begin(), dp.end(), inf); // for (int i = n;i >= 1;i--) { // root[i] = ++node; // int x = Get(root[i + 1], 1, inf, a[i] + 1, inf) + 1; // Modify(root[i], root[i + 1], 1, inf, a[i], x); // } // for (int i = 1;i <= n;i++) { // auto u = lower_bound(dp.begin(), dp.end(), a[i]) - dp.begin(); // dp[u] = a[i]; // ans = max(ans, u + 1 + Get(root[i + 1], 1, inf, max(1ll, a[i] - x + 1), inf)); // } cout << ans << '\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...