Submission #287990

#TimeUsernameProblemLanguageResultExecution timeMemory
287990oolimryBigger segments (IZhO19_segments)C++14
100 / 100
71 ms14856 KiB
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define sz(x) (int) (x).size()
using namespace std;
typedef long long lint;
typedef pair<int,lint> ii;
typedef pair<lint,ii> iii;

int arr[500006];

int main(){
	ios_base::sync_with_stdio(false); cin.tie(0);
	
	int n; cin >> n;
	for(int i = 1;i <= n;i++) cin >> arr[i];
	lint prefix = 0;
			
	deque<iii> D;
	D.push_back(iii(0,ii(0,0)));
	
	for(int i = 1;i <= n;i++){
		prefix += arr[i];
		
		while(sz(D) > 1){
			if(D[1].first <= prefix) D.pop_front();
			else break;
		}
		
		ii res = D[0].second;
		int most = res.first + 1;
		lint take = prefix - res.second;
		
		if(i == n) cout << most;
		while(sz(D) > 0){
			iii T = D.back();
			if(T.first >= take + prefix) D.pop_back();
			else break;
		}
		D.push_back(iii(take+prefix, ii(most, prefix)));
	}
}
#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...