제출 #1237639

#제출 시각아이디문제언어결과실행 시간메모리
1237639clemmy14Bouquet (EGOI24_bouquet)C++20
100 / 100
91 ms6332 KiB
#include<bits/stdc++.h> using namespace std; const int INF=1e9; struct SegTreeMax { int n; vector<int> s; SegTreeMax(int n) : s(2*n), n(n) {} void update(int pos, int val) { for(s[pos+=n]=val; pos/=2;) { s[pos]=max(s[pos*2], s[pos*2+1]); } } int query(int b, int e) { int ra=-INF, rb=-INF; for(b+=n, e+=n; b<e; b/=2, e/=2) { if(b%2) ra=max(ra, s[b++]); if(e%2) rb=max(rb, s[--e]); } return max(ra, rb); } }; signed main() { int n; cin >> n; vector<int> l(n), r(n); for(int i=0; i<n; i++) cin >> l[i] >> r[i]; SegTreeMax segmax(n); priority_queue<pair<int, int>> q; vector<int> dp(n, 1); int ans=0; for(int i=0; i<n; i++) { while(!q.empty() && q.top().first == -i) { segmax.update(q.top().second, dp[q.top().second]); q.pop(); } int cur=1; if(i-l[i] > 0) cur=segmax.query(0, i-l[i])+1; dp[i]=cur; q.push({-(i+r[i]+1), i}); ans=max(ans, dp[i]); } cout << ans; 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...