Submission #1141245

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