제출 #501645

#제출 시각아이디문제언어결과실행 시간메모리
501645LucaIlieBigger segments (IZhO19_segments)C++17
0 / 100
1 ms204 KiB
#include <iostream> using namespace std; #define MAX_N 100000 struct DP { int segm; long long suma; }; int v[MAX_N + 1]; long long sp[MAX_N + 1]; DP dp[MAX_N + 1]; int main() { int n, i, j; cin >> n; for ( i = 1; i <= n; i++ ) { cin >> v[i]; sp[i] = sp[i - 1] + v[i]; } dp[0] = { 1, 0 }; j = 1; for ( i = 1; i <= n; i++ ) { if ( dp[i - 1].segm > dp[i].segm ) dp[i] = { dp[i - 1].segm, dp[i - 1].suma + v[i] }; else if ( dp[i - 1].segm == dp[i].segm ) { if ( dp[i - 1].suma + v[i] < dp[i].suma ) dp[i].suma = dp[i - 1].suma + v[i]; } while ( j <= n && sp[j] - sp[i] < dp[i].suma ) j++; if ( j <= n ) { if ( dp[i].segm + 1 > dp[j].segm ) dp[j] = { dp[i].segm + 1, sp[j] - sp[i] }; else if ( dp[i].segm + 1 == dp[j].segm ) { if ( sp[j] - sp[i] < dp[j].suma ) dp[j].suma = sp[j] - sp[i]; } } } cout << dp[n].segm; 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...