Submission #771047

#TimeUsernameProblemLanguageResultExecution timeMemory
771047SamAndFinancial Report (JOI21_financial)C++17
100 / 100
428 ms28580 KiB
#include <bits/stdc++.h> using namespace std; #define m_p make_pair #define all(x) (x).begin(),(x).end() #define sz(x) ((int)(x).size()) #define fi first #define se second typedef long long ll; mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count()); mt19937 rnf(2106); const int N = 300005; int n, d; int a[N]; int p[N]; int l[N], r[N]; int fi(int x) { if (x == p[x]) return x; return p[x] = fi(p[x]); } void kpc(int x, int y) { if (abs(x - y) > d) return; x = fi(x); y = fi(y); p[x] = y; l[y] = min(l[y], l[x]); r[y] = max(r[y], r[x]); } int maxu[N * 4]; void ubd(int tl, int tr, int x, int y, int pos) { if (tl == tr) { maxu[pos] = max(maxu[pos], y); return; } int m = (tl + tr) / 2; if (x <= m) ubd(tl, m, x, y, pos * 2); else ubd(m + 1, tr, x, y, pos * 2 + 1); maxu[pos] = max(maxu[pos * 2], maxu[pos * 2 + 1]); } int qry(int tl, int tr, int l, int r, int pos) { if (l > r) return 0; if (tl == l && tr == r) return maxu[pos]; int m = (tl + tr) / 2; return max(qry(tl, m, l, min(m, r), pos * 2), qry(m + 1, tr, max(m + 1, l), r, pos * 2 + 1)); } void solv() { cin >> n >> d; for (int i = 1; i <= n; ++i) cin >> a[i]; vector<pair<int, int> > v; for (int i = 1; i <= n; ++i) v.push_back(m_p(a[i], -i)); sort(all(v)); for (int i = 1; i <= n; ++i) { l[i] = r[i] = i; p[i] = i; } set<int> s; for (int i = 0; i < n; ++i) { v[i].se *= -1; s.insert(v[i].se); auto it = s.find(v[i].se); if (it != s.begin()) { --it; kpc(v[i].se, *it); ++it; } if (it != (--s.end())) { ++it; kpc(v[i].se, *it); --it; } int u = l[fi(v[i].se)]; int dp = qry(1, n, u, v[i].se, 1) + 1; ubd(1, n, v[i].se, dp, 1); } cout << maxu[1] << "\n"; } int main() { #ifdef SOMETHING freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); #endif // SOMETHING ios_base::sync_with_stdio(false), cin.tie(0); int tt = 1; //cin >> tt; while (tt--) { solv(); } 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...