제출 #1181656

#제출 시각아이디문제언어결과실행 시간메모리
1181656nuutsnoyntonBigger segments (IZhO19_segments)C++20
0 / 100
0 ms320 KiB
#include<bits/stdc++.h>

using namespace std;
using ll = long long;
ll dp[3003][3003], a[3002], pre[3002];
vector < ll > V[3003];
ll Sum(ll x, ll y) {
	return pre[y] - pre[x - 1];
}

int main() {
	ll n, m, s, sum,sum1, r, x, y, i, j, ans, t, cnt;

	cin >> n;
	
	
	pre[0] = 0;
	for (i = 1; i <= n; i ++) {
		cin >> a[i];
		pre[i] = pre[i - 1] + a[i];
	}
	vector < ll > v, q;
	v.push_back(pre[1]* 2);
	q.push_back(pre[1]);
	V[0].push_back(pre[1]);
	for (i = 2; i <= n; i ++) {
		if ( v.back() <= pre[i]) {
			r = v.size() - 1;
			sum1 = pre[i] - q.back();
//			cout << i << " " << sum1 << endl;
			ans = 0;
			for ( j = 0; j < V[r].size(); j ++) {
				if ( V[r][j] <= (sum1 - V[r][j])) ans = j;
			}
			q.push_back(pre[i]);
			v.push_back(pre[i] + (sum1 - V[r][ans]));
			V[r + 1].push_back(sum1 - V[r][ans]);
		}
		else {
			r = upper_bound(v.begin(), v.end(), pre[i]) - v.begin();
			r --;
			s = pre[i] - q[r];
			V[r].push_back(s);
		}
	}
	
	cout << v.size()<< endl;
}
#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...