제출 #1141209

#제출 시각아이디문제언어결과실행 시간메모리
1141209NurislamBigger segments (IZhO19_segments)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>

using namespace std;

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);
	
	for(int i = 1; i <= n; i++){
		opt[i] = opt[i-1];
		dp[i] = dp[i-1];
		if( a[i-1] >= opt[i-1] ) dp[i] = dp[i-1], opt[i] = a[i-1];
		
		int l = 0, r = i-1, ch = 0;
		while(l <= r){
			int m = (l+r) >> 1;
			
			if( dp[i] - dp[m] > 1)
				l = m + 1;
			else if( opt[m] > pr[i] - pr[m] )
				r = m - 1;
			else{
				l = m + 1;
				ch = m;
			}
		}
		
		
		if( dp[i] < dp[ch] + 1){
			dp[i] = dp[ch] + 1;
			opt[i] = pr[i] - pr[ch];
		}
		if( dp[i] == dp[ch] + 1)
			opt[i] = min( opt[i], pr[i] - pr[ch] );
	}
	
	
	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...