Submission #1134340

#TimeUsernameProblemLanguageResultExecution timeMemory
1134340AgageldiBigger segments (IZhO19_segments)C++17
13 / 100
1 ms328 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define N 600005
#define pb push_back
#define ff first
#define ss second
#define sz(s) (int)s.size()

ll n, t, a[N], dp[N], p[N], sum[N];
vector <pair<int,int>> v;
priority_queue <pair<ll,int>> ans;

int main (){
	ios::sync_with_stdio(0);cin.tie(0);
	cin >> n;
	for(int i = 1; i <= n; i++) {
		cin >> a[i];
		p[i] = p[i - 1] + a[i];
	}
	for(int i = 1; i <= n; i++) {
		if(!v.empty()){
			int l = 0,r = sz(v) - 1,jog = -1;
			while(l<=r) {
				int md = (l+r)/2;
				if(v[md].ff > p[i]) {
					r = md-1;
				}
				else {
					jog = md;
					l = md + 1;
				}
			}
			if(!(~jog)) {
				dp[i] = 1;
				sum[i] = p[i];
			}
			else {
				dp[i] = dp[v[jog].ss] + 1;
				sum[i] = p[i] - p[v[jog].ss];
			}
		}
		else {
			dp[i] = 1;
			sum[i] = a[i];
		}
		while(!v.empty() && v.back().ff >= p[i] + sum[i]){
			v.pop_back();
		}
		v.pb({p[i] + sum[i], 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...