Submission #342554

#TimeUsernameProblemLanguageResultExecution timeMemory
342554dimashiiBigger segments (IZhO19_segments)C++17
13 / 100
1 ms492 KiB
#include <bits/stdc++.h>

#define f first
#define s second

#define fastio ios :: sync_with_stdio(0), cin.tie(0), cout.tie(0);

#define ll long long

using namespace std;

const int mxN = 1e6 + 45, mod = 1e9 + 7;
const ll inf = 2e18 + 43;

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

int n, a[mxN], dp[mxN];

ll p[mxN];

set <pair <int, ll> > st;

void add(int idx, ll sum) {
	if (st.empty()) {
		st.insert({sum, idx});
		return;
	}
	auto it = st.lower_bound({sum + 1, 0});
	vector <pair <int, ll> > del;
	while (it != st.end()) del.push_back(*(it++));
	for (auto x : del) st.erase(x);
	st.insert({sum, idx});
}

int get(int idx, ll sum) {
	auto it = st.lower_bound({sum + 1, 0});
	it--;
	return it -> second;
}

int main() {
	fastio;
	cin >> n;
	for (int i = 1; i <= n; ++i) cin >> a[i], p[i] = p[i - 1] + a[i];
	add(0, 0);
	for (int i = 1; i <= n; ++i) {
		int L = get(i, p[i]);
		dp[i] = dp[L] + 1;
		add(i, p[i] * 2 - p[L]);
	}
	cout << dp[n];
	return 0;
}
#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...