#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 */ |