제출 #1167834

#제출 시각아이디문제언어결과실행 시간메모리
1167834usukhbaatarBouquet (EGOI24_bouquet)C++20
24 / 100
101 ms9460 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 1; int n, l[maxn], r[maxn]; int ans, dp[maxn]; int st[maxn << 2]; vector<int> que[maxn]; void update(int i, int tl, int tr, int p, int v) { if (tl == tr) { st[i] = v; return; } int x = (i << 1) + 1, y = x + 1; int tm = (tl + tr) >> 1; if (p <= tm) update(x, tl, tm, p, v); else update(y, tm + 1, tr, p, v); st[i] = max(st[x], st[y]); } int query(int i, int tl, int tr, int l, int r) { if (r < l) return 0; if (tl == l && r == tr) return st[i]; int x = (i << 1) + 1, y = x + 1; int tm = (tl + tr) >> 1; if (r <= tm) return query(x, tl, tm, l, r); if (tm < l) return query(y, tm + 1, tr, l, r); return max( query(x, tl, tm, l, tm), query(y, tm + 1, tr, tm + 1, r) ); } //90173 int main() { cin >> n; for (int i = 0; i < n; i++) cin >> l[i] >> r[i]; for (int i = 0; i < n; i++) { int ll = i - l[i] - 1; dp[i] = query(0, 0, n - 1, 0, ll) + 1; update(0, 0, n - 1, i, dp[i]); ans = max(ans, dp[i]); } cout << ans << endl; 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...