제출 #628046

#제출 시각아이디문제언어결과실행 시간메모리
628046vbeeBigger segments (IZhO19_segments)C++14
100 / 100
167 ms34544 KiB
#include <bits/stdc++.h> #define fi first #define se second #define TASK "simpsegments" #define pb push_back #define all(r) (r).begin(), (r).end() #define ll long long #define MASK(i) (1 << (i)) #define BIT(x, i) ((x) >> (i) & 1) using namespace std; const int LOG = 19; const int oo = 1e9 + 7; const ll loo = (ll)1e18 + 7; const int N = 5e5 + 7; int n, trace[N]; ll f[N], pre[N], a[N]; bool minimize(ll &a, ll b){ if (a > b) { a = b; return true; } return false; } struct segtree{ vector<ll> t; segtree(int _n){ t.resize(4 * _n + 7); for (int i = 1; i < 4 * _n; i++) t[i] = loo; } void update(int v, int lt, int rt, int pos, ll value){ if (lt == rt) return (void)(t[v] = value); int middle = (rt + lt) / 2; if (pos <= middle) update(v * 2, lt, middle, pos, value); else update(v * 2 + 1, middle + 1, rt, pos, value); t[v] = min(t[v * 2], t[v * 2 + 1]); } int getid(int v, int lt, int rt, ll value){ if (t[v] > value) return -1; if (lt == rt) return lt; int middle = (rt + lt) / 2; int temp = getid(v * 2 + 1, middle + 1, rt, value); if (temp == -1) return getid(v * 2, lt, middle, value); else return temp; } }; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); // freopen(TASK".inp", "r", stdin); // freopen(TASK".out", "w", stdout); cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) pre[i] = pre[i - 1] + a[i]; for (int i = 1; i <= n; i++) f[i] = loo; segtree seg(n + 1); seg.update(1, 1, n + 1, 1, 0); for (int i = 1; i <= n; i++){ int cur = seg.getid(1, 1, n + 1, pre[i]); if (minimize(f[i], pre[i] - pre[cur - 1])) trace[i] = cur - 1; seg.update(1, 1, n + 1, i + 1, f[i] + pre[i]); } int cur = n, res = 0; while (cur != 0) { cur = trace[cur]; res++; } cout << res; // } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...