Submission #1141233

#TimeUsernameProblemLanguageResultExecution timeMemory
1141233NurislamBigger segments (IZhO19_segments)C++20
0 / 100
0 ms324 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);
	
	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, ans = i;
		
		while(l <= r){
			int m = (l + r) >> 1;
			
			if(pr[m] < df) l = m + 1;
			else {
				ans = m;
				r = m - 1;
			}
		}
		
		if ( dp[ans] < dp[i] + 1) dp[ans] = dp[i] + 1, opt[ans] = i;
		if ( dp[ans] == dp[i] + 1) opt[ans] = max(opt[ans], i);
	}
	
	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...