Submission #501626

#TimeUsernameProblemLanguageResultExecution timeMemory
501626LucaIlieBigger segments (IZhO19_segments)C++17
0 / 100
0 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[i] = { 1, sp[i] }; } j = 1; for ( i = 1; i <= n; i++ ) { while ( j <= n && sp[j] < sp[i] + dp[i].suma ) { if ( j > i ) { if ( dp[i].segm > dp[j].segm ) dp[j] = { dp[i].segm, dp[i].suma + sp[j] - sp[i] }; else if ( dp[i].segm == dp[j].segm ) { if ( dp[i].suma + sp[j] - sp[i] < dp[j].suma ) dp[j].suma = dp[i].suma + sp[j] - sp[i]; } } 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...