Submission #870042

#TimeUsernameProblemLanguageResultExecution timeMemory
870042serifefedartarFinancial Report (JOI21_financial)C++17
100 / 100
420 ms27080 KiB
#include <bits/stdc++.h> using namespace std; #define fast ios::sync_with_stdio(0);cin.tie(0); #define s second #define f first typedef long long ll; const ll MOD = 1e9+9; const ll LOGN = 20; const ll MAXN = 3e5 + 100; vector<int> A; int par[MAXN], leftmost[MAXN]; int find(int node) { if (node == par[node]) return node; return par[node] = find(par[node]); } void unite(int a, int b) { a = find(a), b = find(b); if (a == b) return ; par[b] = a; leftmost[a] = min(leftmost[a], leftmost[b]); } int sg[4*MAXN]; void update(int k, int a, int b, int plc, int val) { if (b < plc || a > plc) return ; if (a == b) { sg[k] = val; return ; } update(2*k, a, (a+b)/2, plc, val); update(2*k+1, (a+b)/2+1, b, plc, val); sg[k] = max(sg[2*k], sg[2*k+1]); } int query(int k, int a, int b, int q_l, int q_r) { if (b < q_l || a > q_r) return 0; if (q_l <= a && b <= q_r) return sg[k]; return max(query(2*k, a, (a+b)/2, q_l, q_r), query(2*k+1, (a+b)/2+1, b, q_l, q_r)); } vector<int> ind; int main() { fast int N, D; cin >> N >> D; A = vector<int>(N+1); for (int i = 1; i <= N; i++) par[i] = i, leftmost[i] = i; for (int i = 1; i <= N; i++) cin >> A[i]; for (int i = 1; i <= N; i++) ind.push_back(i); sort(ind.begin(), ind.end(), [&](int a, int b) { return (A[a] < A[b] || (A[a] == A[b] && a > b)); }); set<int> st; for (auto u : ind) { auto x = st.lower_bound(u); if (x != st.end()) { int p = *x; if (abs(p - u) <= D) unite(p, u); } if (x != st.begin()) { x--; int p = *x; if (abs(p - u) <= D) unite(p, u); } st.insert(u); int fnd = leftmost[find(u)]; int dp = max(1, (fnd <= u - 1 ? query(1, 1, N, fnd, u - 1) + 1 : 0)); update(1, 1, N, u, dp); } cout << query(1, 1, N, 1, 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...