Submission #1088813

#TimeUsernameProblemLanguageResultExecution timeMemory
1088813xnqsBigger segments (IZhO19_segments)C++17
0 / 100
0 ms460 KiB
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>

int x;
int arr[500005];
int64_t pfx[500005];
std::vector<int64_t> stk;

int solve(int start) {
	int64_t sum = 0;
	for (int i = start; i <= x; i++) {
		sum += arr[i];
		if (stk.back()<=sum) {
			stk.emplace_back(sum);
			sum = 0;
		}
	}

	if (sum) {
		stk.emplace_back(sum);
	}

	if (stk.size()>=2&&stk[stk.size()-2]>stk[stk.size()-2]) {
		stk[stk.size()-2] += stk[stk.size()-1];
		stk.pop_back();
	}

	return static_cast<int>(stk.size());
}

int main() {
	std::ios_base::sync_with_stdio(false);
	std::cin.tie(NULL);
	std::cout.tie(NULL);

	std::cin >> x;
	for (int i = 1; i <= x; i++) {
		std::cin >> arr[i];
		pfx[i] = pfx[i-1] + arr[i];
	}

	int64_t first_sum = 0;
	int ans = 0;
	for (int start = 1; start <= x; start++) {
		first_sum += arr[start];
		stk.emplace_back(first_sum);
		ans = std::max(ans, solve(start+1));
		stk.clear();
	}

	std::cout << ans << "\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...