Submission #1193640

#TimeUsernameProblemLanguageResultExecution timeMemory
1193640veehjBouquet (EGOI24_bouquet)C++20
0 / 100
43 ms8156 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define fi first
#define se second
#define pb push_back
#define sz(a) (ll) a.size()
#define all(x) (x).begin(), (x).end()
#define rep(i, a, b) for(ll i=a; i<b; i++)
#define rrep(i, a, b) for(ll i=a; i>=b; i--)
#define vl vector<ll>
#define vpll vector<pair<ll, ll>>
#define vvl vector<vector<ll>>
#define pll pair<ll, ll>
ll n;
vl l, r, dpl, dpr, best;

void f() {
  cin >> n;
  l.resize(n);
  r.resize(n);
  rep(i, 0, n) cin >> l[i] >> r[i];
  dpl.assign(n, 0);
  dpr.assign(n, 0);
  best.assign(n, 0);
  dpl[0]=1;
  best[0]=1;
  rep(i, 1, n){
    dpl[i]=1;
    if(i-l[i]-1>=0 && i>=i-l[i]-1+r[i-l[i]-1]+1) dpl[i]=max(dpl[i], best[i-l[i]-1]+1);
    if(i-3>=0) dpl[i]=max(dpl[i], best[i-3]+1);
    best[i]=max(best[i-1], dpl[i]);
  }
  dpr[n-1]=1;
  best.assign(n, 0);
  best[n-1]=1;
  rrep(i, n-2, 0){
    dpr[i]=1;
    if(i+r[i]+1<n && i<=i+r[i]+1-l[i+r[i]+1]-1) dpr[i]=max(dpr[i], best[i+r[i]+1]+1);
    if(i+3<n) dpr[i]=max(dpr[i], best[i+3]+1);
    best[i]=max(best[i+1], dpr[i]);
  }
  ll ans=max(dpl[n-1], dpr[0]);
  rep(i, 1, n-1) ans=max(ans, dpl[i]+dpr[i]-1);
  cout << ans;
}

int main() {
  int tc = 1;
  // cin >> tc;
  for (int i = 1; i <= tc; i++) {
    // cout << '#' << i << endl;
    f();
    if (i != tc) cout << endl;
  }
}
#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...