#include <bits/stdc++.h> using namespace std; #define REP(i,n) for(int _n=(n), i=0;i<_n;++i) #define FOR(i,a,b) for(int i=(a),_b=(b);i<=_b;++i) #define FORD(i,a,b) for(int i=(a),_b=(b);i>=_b;--i) #define TRACE(x) cerr << "TRACE(" #x ")" << endl; #define DEBUG(x) cerr << #x << " = " << (x) << endl; typedef long long LL; typedef unsigned long long ULL; int read_and_solve() { int n; cin >> n; vector<LL> waste; waste.reserve(n); LL sum = 0; int result = 0; REP(i,n) { LL x; cin >> x; sum += x; if (sum >= 0) { auto it = upper_bound(waste.begin(), waste.end(), sum); result = n - int(it - waste.begin() + 1); if (it == waste.end()) { waste.push_back(sum); } else { *it = sum; } } else { result = -1; } } return result; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int res = read_and_solve(); cout << res << "\n"; }
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 | #include <bits/stdc++.h> using namespace std; #define REP(i,n) for(int _n=(n), i=0;i<_n;++i) #define FOR(i,a,b) for(int i=(a),_b=(b);i<=_b;++i) #define FORD(i,a,b) for(int i=(a),_b=(b);i>=_b;--i) #define TRACE(x) cerr << "TRACE(" #x ")" << endl; #define DEBUG(x) cerr << #x << " = " << (x) << endl; typedef long long LL; typedef unsigned long long ULL; int read_and_solve() { int n; cin >> n; vector<LL> waste; waste.reserve(n); LL sum = 0; int result = 0; REP(i,n) { LL x; cin >> x; sum += x; if (sum >= 0) { auto it = upper_bound(waste.begin(), waste.end(), sum); result = n - int(it - waste.begin() + 1); if (it == waste.end()) { waste.push_back(sum); } else { *it = sum; } } else { result = -1; } } return result; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int res = read_and_solve(); cout << res << "\n"; } |