제출 #501643

#제출 시각아이디문제언어결과실행 시간메모리
501643LucaIlieBigger segments (IZhO19_segments)C++17
37 / 100
1521 ms1892 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]; } j = i + 1; 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...