Submission #1069371

#TimeUsernameProblemLanguageResultExecution timeMemory
1069371ArthuroWichDistributing Candies (IOI21_candies)C++17
11 / 100
189 ms21616 KiB
#include "candies.h" #include<bits/stdc++.h> using namespace std; #define int long long int int seg[4*200005], lazy[4*200005]; void lazypropagate(int n, int l, int r) { if (lazy[n]) { seg[n] += (r-l+1)*lazy[n]; if (l != r) { lazy[2*n] += lazy[n]; lazy[2*n+1] += lazy[n]; } lazy[n] = 0; } } void update(int n, int l, int r, int a, int b, int v) { lazypropagate(n, l, r); if (b < l || r < a) { return; } else if (a <= l && r <= b) { lazy[n] += v; lazypropagate(n, l, r); } else { int m = (l+r)/2; update(2*n, l, m, a, b, v); update(2*n+1, m+1, r, a, b, v); seg[n] = seg[2*n] + seg[2*n+1]; } } int query(int n, int l, int r, int i) { lazypropagate(n, l, r); if (l == r) { return seg[n]; } else { int m = (l+r)/2; if (l <= i && i <= m) { return query(2*n, l, m, i); } else { return query(2*n+1, m+1, r, i); } } } vector<int32_t> distribute_candies(vector<int32_t> c, vector<int32_t> l, vector<int32_t> r, vector<int32_t> v) { int n = c.size(), q = l.size(); vector<int32_t> s(n, 0); if (n <= 2000 && q <= 2000) { for (int i = 0; i < q; i++) { for (int j = l[i]; j <= r[i]; j++) { s[j] += v[i]; s[j] = min(s[j], c[j]); s[j] = max(s[j], 0); } } } else { for (int i = 0; i < q; i++) { update(1, 0, n-1, l[i], r[i], v[i]); } for (int i = 0; i < n; i++) { s[i] = min((int)c[i], query(1, 0, n-1, i)); } } return s; }
#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...