Submission
Status:
[-SSSSSSSSS]
Score: 0
User: Dormon
Problemset: 02.Forbidden Boss Room
Language: cpp
Time: 0.002 second
Submitted On: 2025-03-31 10:49:15
#include <iostream>
#include <vector>
#include <array>
#include <algorithm>
using namespace std;
#define fr first
#define se second
struct Fenwick{
vector<int> fw;
int n;
Fenwick(int sz) : n(sz + 1) {
fw.resize(sz + 1);
}
void upd(int i, int val){
for (;i < n;i+=i&-i)
fw[i] += val;
}
int qry(int i){
int res = 0;
for (;i;i-=i&-i)
res += fw[i];
return res;
}
};
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
vector<int> v(n + 1);
vector<pair<int, int>> neg;
Fenwick tree(n + 1);
int ans = 0;
for (int i = 1;i <= n;i++){
cin >> v[i];
if (v[i] >= 0){
ans++;
tree.upd(i, v[i]);
}
else
neg.push_back({-v[i], i});
}
sort(neg.begin(), neg.end());
for (auto [d, idx]:neg){
if (tree.qry(idx) >= d){
tree.upd(idx, -d);
ans++;
}
}
cout << ans << "\n";
}