Submission
Status:
[PPPPPPPP][PPPPPPPP][PPPPPPPPP]
Score: 100
User: PakinDioxide
Problemset: 06.Happiness
Language: cpp
Time: 0.091 second
Submitted On: 2025-03-31 02:28:51
/*
author : PakinDioxide
created : 25/03/2025 11:00
task : happiness
*/
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll seg[800005], laz[800005];
void push(int node) {
seg[node*2+1] += laz[node];
seg[node*2+2] += laz[node];
laz[node*2+1] += laz[node];
laz[node*2+2] += laz[node];
laz[node] = 0;
}
void add(int l, int r, int x, int y, int k, int node) {
if (x <= l && r <= y) seg[node] += k, laz[node] += k;
else {
push(node);
int mid = l + (r-l)/2;
if (x <= mid) add(l, mid, x, y, k, node*2+1);
if (mid+1 <= y) add(mid+1, r, x, y, k, node*2+2);
seg[node] = min(seg[node*2+1], seg[node*2+2]);
}
}
ll sum(int l, int r, int x, int y, int node) {
if (x <= l && r <= y) return seg[node];
else {
push(node);
int mid = l + (r-l)/2;
ll mn = LLONG_MAX;
if (x <= mid) mn = min(mn, sum(l, mid, x, y, node*2+1));
if (mid+1 <= y) mn = min(mn, sum(mid+1, r, x, y, node*2+2));
return mn;
}
}
int main() {
ios::sync_with_stdio(0), cin.tie(0);
int n;
cin >> n;
int a[n+1], cnt = 0;
vector <pair <int, int>> v;
for (int i = 1; i <= n; i++) {
cin >> a[i];
if (a[i] >= 0) add(1, n, i, n, a[i], 0), cnt++;
else v.emplace_back(a[i], i);
}
// for (int i = 1; i <= n; i++) cout << sum(1, n, i, i, 0) << ' ';
// cout << '\n';
sort(v.begin(), v.end());
reverse(v.begin(), v.end());
for (auto &[e, idx] : v) {
if (sum(1, n, idx, n, 0) >= -e) /*cout << sum(1, n, idx, n, 0) << '\n', */add(1, n, idx, n, e, 0), cnt++;
// for (int i = 1; i <= n; i++) cout << sum(1, n, i, i, 0) << ' ';
// cout << '\n';
}
cout << cnt << '\n';
}