Submission #1256805

#TimeUsernameProblemLanguageResultExecution timeMemory
1256805tvgkFinancial Report (JOI21_financial)C++20
100 / 100
668 ms28628 KiB
#include<bits/stdc++.h> using namespace std; #define task "a" #define se second #define fi first #define ll long long #define ii pair<ll, ll> const long mxN = 3e5 + 7, inf = 1e9 + 7; int n, dsu[mxN], tree[mxN * 4], lazy[mxN * 4], dif; ii a[mxN]; set<int> s; int Find(int j) { if (dsu[j] == j) return j; else return dsu[j] = Find(dsu[j]); } void Union(int u, int v) { u = Find(u); v = Find(v); if (u == v) return; dsu[u] = v; } void Down(int j) { tree[j * 2] = max(tree[j * 2], lazy[j]); lazy[j * 2] = max(lazy[j * 2], lazy[j]); tree[j * 2 + 1] = max(tree[j * 2 + 1], lazy[j]); lazy[j * 2 + 1] = max(lazy[j * 2 + 1], lazy[j]); lazy[j] = 0; } void Upd(int u, int v, int val, int j = 1, int l = 1, int r = n) { if (l > v || u > r) return; if (u <= l && r <= v) { tree[j] = max(tree[j], val); lazy[j] = max(lazy[j], val); return; } Down(j); int mid = (l + r) / 2; Upd(u, v, val, j * 2, l, mid); Upd(u, v, val, j * 2 + 1, mid + 1, r); tree[j] = max(tree[j * 2], tree[j * 2 + 1]); } int Get(int u, int v, int j = 1, int l = 1, int r = n) { if (u > r || l > v) return 0; if (u <= l && r <= v) return tree[j]; Down(j); int mid = (l + r) / 2; int res = max(Get(u, v, j * 2, l, mid), Get(u, v, j * 2 + 1, mid + 1, r)); tree[j] = max(tree[j * 2], tree[j * 2 + 1]); return res; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //freopen(task".INP", "r", stdin); //freopen(task".OUT", "w", stdout); cin >> n >> dif; for (int i = 1; i <= n; i++) { cin >> a[i].fi; a[i].se = -i; dsu[i] = i; } sort(a + 1, a + n + 1); s.insert(-inf); s.insert(inf); for (int i = 1; i <= n; i++) { int vt = -a[i].se; //Noi int nei = *s.upper_bound(vt); if (nei - vt <= dif) Union(vt, nei); nei = *(--s.upper_bound(vt)); if (vt - nei <= dif) Union(nei, vt); s.insert(vt); int dp = Get(vt - dif, vt) + 1; Upd(vt, Find(vt), dp); } cout << Get(n, 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...