| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1369978 | codexistent | Bouquet (EGOI24_bouquet) | C++20 | 0 ms | 0 KiB |
#include <iostream>
using namespace std;
#define int long long
const int N=2e5+5;
int n,ft[N],f[N],z=1;
vector<int>a[N];
void upd(int i,int v){ while(i<=n)ft[i]=max(ft[i],v),i+=(i&-i);}
int qry(int i){ return (i>0)?max(ft[i],qry(i-(i&-i))):0ll; }
signed main(){
cin>>n;
for(int i=1,l,r;i<=n;i++){
for(int ai:a[i])upd(ai,f[ai]);
cin>>l>>r,f[i]=1+qry(max(0ll,i-l-1));
z=max(z,f[i]);
for(int ai:a[i])upd(ai,f[ai]);
if(i+r+1<=n)a[i+r+1].push_back(i);
}
cout<<z<<endl;
}