제출 #1141245

#제출 시각아이디문제언어결과실행 시간메모리
1141245NurislamBigger segments (IZhO19_segments)C++20
100 / 100
136 ms16204 KiB
#include <bits/stdc++.h> using namespace std; #define int long long signed main(){ int n; cin >> n; vector<int> a(n); for(int &i : a) cin >> i; vector<int> pr{0}; for(int i : a) pr.push_back(pr.back() + i); vector<int> dp (n + 1, 0), opt(n + 1, 0); dp[1] = 1; for(int i = 1; i <= n; i++) { if(dp[i] < dp[i-1]) dp[i] = dp[i-1], opt[i] = opt[i-1]; if(dp[i] == dp[i-1]) opt[i] = max(opt[i-1], opt[i]); int df = pr[i] * 2 - pr[opt[i]]; int l = i + 1, r = n+1; while(l < r){ int m = (l + r) >> 1; if(pr[m] < df) l = m + 1; else r = m; } if ( dp[l] < dp[i] + 1) dp[l] = dp[i] + 1, opt[l] = i; if ( dp[l] == dp[i] + 1) opt[l] = max(opt[l], i); } //for(int i = 0; i < n; i ++ )cout << dp[i] << ' '; //cout << '\n'; cout << dp[n] << '\n'; };
#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...