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...