제출 #216926

#제출 시각아이디문제언어결과실행 시간메모리
216926keta_tsimakuridzeBigger segments (IZhO19_segments)C++14
100 / 100
332 ms20884 KiB
#include<bits/stdc++.h>
using namespace std;
long long sum[500005],a[500005],m,k,n,bef[500005],cursum,dp[500005],l,r,ans;
int main(){
	cin>>n;
	for(k=1;k<=n;k++){
		cin>>a[k];
		sum[k]=sum[k-1]+a[k];
	}
	
	for(k=1;k<=n;k++){
		bef[k]=max(bef[k],bef[k-1]);
		cursum=sum[k]-sum[bef[k]];
		dp[k]=dp[bef[k]]+1;
		
		l=k; r=n; ans=0;
		while(l<=r){
			int mid=(l+r)/2;
			if(sum[mid]-sum[k]>=cursum){
				r=mid-1; ans=mid;
			}
			else l=mid+1;
		}
		bef[ans]=k;
	}
	cout<<dp[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...