#include <bits/stdc++.h>
using namespace std;
#define ALL(x) (x).begin(), (x).end()
template<class C> void mini(C &a5, C b5) { a5 = min(a5, b5); }
template<class C> void maxi(C &a5, C b5) { a5 = max(a5, b5); }
#ifdef LOCAL
const bool debug = true;
#else
const bool debug = false;
#define cerr if (true) {} else cout
#endif
#define int long long
#define double long double
const int INF = 1e18;
const int mod = 1e9 + 7;
struct Moj {
int added, shifted;
// pos, cost
set<pair<int, int> > s;
Moj() {
added = shifted = 0;
s.insert({0, 0});
}
int add(int shift) {
auto it = s.lower_bound(make_pair(-shifted, -INF));
if (it == s.end()) {
added++;
shifted += shift;
return -1;
}
int value = it->second + added;
added++;
it = s.insert({-shifted, value - added}).first;
auto it2 = it;
while (it != s.begin()) {
it2 = it;
it2--;
if (it2->second < it->second) break;
s.erase(it2);
}
shifted += shift;
return value;
}
};
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
Moj m;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int a;
cin >> a;
m.add(a);
}
cout << m.add(0);
return 0;
}/*
17
2 -5 0 2 0 0 0 4 0 0 -1 4 0 0 0 0 -3
* 12
5
-1 -1 4 -1 -1
* 4
4
-1 -1 1 -1
* -1
5
-1 -1 1 -1 10
* 4
*/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include <bits/stdc++.h> using namespace std; #define ALL(x) (x).begin(), (x).end() template<class C> void mini(C &a5, C b5) { a5 = min(a5, b5); } template<class C> void maxi(C &a5, C b5) { a5 = max(a5, b5); } #ifdef LOCAL const bool debug = true; #else const bool debug = false; #define cerr if (true) {} else cout #endif #define int long long #define double long double const int INF = 1e18; const int mod = 1e9 + 7; struct Moj { int added, shifted; // pos, cost set<pair<int, int> > s; Moj() { added = shifted = 0; s.insert({0, 0}); } int add(int shift) { auto it = s.lower_bound(make_pair(-shifted, -INF)); if (it == s.end()) { added++; shifted += shift; return -1; } int value = it->second + added; added++; it = s.insert({-shifted, value - added}).first; auto it2 = it; while (it != s.begin()) { it2 = it; it2--; if (it2->second < it->second) break; s.erase(it2); } shifted += shift; return value; } }; int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); Moj m; int n; cin >> n; for (int i = 0; i < n; i++) { int a; cin >> a; m.add(a); } cout << m.add(0); return 0; }/* 17 2 -5 0 2 0 0 0 4 0 0 -1 4 0 0 0 0 -3 * 12 5 -1 -1 4 -1 -1 * 4 4 -1 -1 1 -1 * -1 5 -1 -1 1 -1 10 * 4 */ |
English