제출 #344370

#제출 시각아이디문제언어결과실행 시간메모리
344370RedhoodBigger segments (IZhO19_segments)C++14
13 / 100
1 ms364 KiB
#include<bits/stdc++.h> #define fi first #define se second #define all(x) (x).begin() , (x).end() #define rall(x) (x).rbegin() , (x).rend() #define pb push_back #define len(x) (int)(x).size() using namespace std; typedef long long ll; typedef long double ld; signed main(){ ios_base::sync_with_stdio(0) , cin.tie(0) , cout.tie(0); int n; cin >> n; vector < int > a(n); for(auto &i : a) cin >> i; vector < ll > pref(n + 1); for(int i = 0; i < n; ++i){ pref[i + 1] = pref[i] + a[i]; } vector < pair < int , int > > dp(n + 1 , {0 , 0}); dp[0] = {0 , 0}; vector < vector < int > > add(n + 2); pair < int , int > cur = {0 , 0}; for(int i = 0; i <= n; ++i){ /// lulz /// calc dp if(i != 0){ for(auto u : add[i]) if(cur.fi < dp[u].fi + 1) cur.fi = dp[u].fi + 1 , cur.se = u; else if(cur.fi == dp[u].fi + 1) cur.se = max(cur.se , u); dp[i] = {cur.fi , pref[i] - pref[cur.se]}; } int frst = lower_bound(all(pref) , pref[i]+dp[i].se) - pref.begin(); frst = max(frst , i + 1); add[frst].pb(i); } // cout << " DP \n"; // for(int i = 0; i <= n; ++i){ // cout << dp[i].fi << ' ' << dp[i].se << '\n'; // } cout << dp[n].fi << '\n'; 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...