# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1107894 | 2024-11-02T09:45:42 Z | alex_2008 | Bigger segments (IZhO19_segments) | C++14 | 0 ms | 0 KB |
#include <iostream> #define ff first #define ss second typedef long long ll; using namespace std; const int N = 5e5 + 10; ll pref[N]; pair <ll, ll> dp[N]; ll dpp[N]; int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> pref[i]; pref[i] += pref[i - 1]; } dp[0] = { 0, 0 }; dpp[0] = 0; for (int i = 1; i <= n; i++) { int ind = upper_bound(dpp, dpp + i, pref[i]) - dpp - 1; dp[i] = { dp[ind].first + 1, pref[i] - pref[ind] }; dpp[i] = dp[i].ss + pref[i]; } cout << dp[n].first << "\n"; }