제출 #1286183

#제출 시각아이디문제언어결과실행 시간메모리
1286183dssfsuper2Bouquet (EGOI24_bouquet)C++20
100 / 100
46 ms7512 KiB
#include <bits/stdc++.h> using namespace std; #define all(x) (x).begin(), (x).end() using pii = pair<int, int>; struct Ftm { vector<int> bit; int n; const int INF = 0; Ftm(int n) { this->n = n; bit.assign(n, INF); } int getmax(int r) { int ret = INF; for (; r >= 0; r = (r & (r + 1)) - 1) ret = max(ret, bit[r]); return ret; } void update(int idx, int val) { for (; idx < n; idx = idx | (idx + 1)) bit[idx] = max(bit[idx], val); } }; void solve(){ int n;cin>>n; Ftm mn(n+1); vector<pii> a={{0, 0}}; for(int i = 1;i<=n;i++){ int x, y;cin>>x>>y; a.push_back({max(1, i-x), min(n, i+y)}); } vector<int> reses={0}; int res=0; priority_queue<pii, vector<pii>, greater<pii>> pq={}; for(int i =1;i<=n;i++){ while(!pq.empty() && pq.top().first<i){ mn.update(pq.top().second, reses[pq.top().second]); pq.pop(); } reses.push_back(1+mn.getmax(a[i].first-1)); res=max(res, reses.back()); pq.push({a[i].second, i}); } cout << res << '\n'; } signed main(){ ios_base::sync_with_stdio(false);cin.tie(0); int T=1;//cin>>T; while(T--)solve(); }
#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...