Submission #1092542

#TimeUsernameProblemLanguageResultExecution timeMemory
1092542SunbaeBigger segments (IZhO19_segments)C++17
100 / 100
72 ms20900 KiB
#include <bits/stdc++.h>
#define z exit(0)
#define mp make_pair
#define F first
#define S second
typedef long long ll;
using namespace std;
const ll INF = 1e15;
const int N = 5e5 + 5, inf = 1e8;
pair<int,ll> dp[N];
ll a[N], qs[N];
ll sum(int l, int r){ return qs[r] - ((l) ? qs[l-1] : 0);}
pair<int,ll> f(pair<int,ll> x, pair<int,ll> y){
	if((x.F > y.F) || (x.F == y.F && x.S <= y.S)) return x;
	return y;
}
signed main(){
	int n; scanf("%d", &n);
	for(int i = 0; i<n; ++i) scanf("%lld", a+i), qs[i] = a[i];
	for(int i = 1; i<n; ++i) qs[i] += qs[i-1];
	fill(dp, dp+n, mp(-inf, INF));
	dp[0] = {1, a[0]};
	for(int i = 1; i<n; ++i){
		if(a[i] >= dp[i-1].S){
			dp[i] = f(dp[i], mp(dp[i-1].F + 1, a[i]));
		}else{
			dp[i] = f(dp[i], mp(dp[i-1].F, dp[i-1].S + a[i]));
			int low = i+1, high = n-1, idx = -1;
			while(low <= high){
				int mid = low + ((high-low)>>1);
				if(sum(i, mid) >= dp[i-1].S) idx = mid, high = mid-1;
				else low = mid+1;
			}
			if(idx != -1) dp[idx] = f(dp[idx], mp(dp[i-1].F + 1, sum(i, idx)));
		}
	}
	printf("%d", dp[n-1].F);
}

Compilation message (stderr)

segments.cpp: In function 'int main()':
segments.cpp:18:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |  int n; scanf("%d", &n);
      |         ~~~~~^~~~~~~~~~
segments.cpp:19:32: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |  for(int i = 0; i<n; ++i) scanf("%lld", a+i), qs[i] = a[i];
      |                           ~~~~~^~~~~~~~~~~~~
#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...