Submission #448538

#TimeUsernameProblemLanguageResultExecution timeMemory
448538grtDistributing Candies (IOI21_candies)C++17
0 / 100
145 ms16812 KiB
#include <bits/stdc++.h> #define ST first #define ND second #define PB push_back using namespace std; using ll = long long; using pi = pair<int,int>; using vi = vector<int>; const int nax = 200 * 1000 + 10; int n, q; ll pref[nax], mi[nax], mx[nax]; vi distribute_candies(vi c, vi la, vi ra, vi v) { n = (int)c.size(); q = (int)la.size(); pref[0] = 0; for(int i = 1; i <= q; ++i) { pref[i] = pref[i - 1] + v[i]; } mi[q] = mx[q] = pref[q]; for(int i = q - 1; i >= 0; --i) { mi[i] = min(mi[i + 1], pref[i]); mx[i] = max(mx[i + 1], pref[i]); } vi ans(n); for(int i = 0; i < n; ++i) { int l = 0, r = q, mid; while(l <= r) { mid = (l + r) / 2; if(mx[mid] - mi[mid] <= c[i]) { r = mid - 1; } else { l = mid + 1; } } if(r == -1) { ans[i] = pref[q]; } else { int pre = r + 1; if(mi[r] < mi[pre]) { // mx[pre] -> c[i]; ans[i] = c[i] - (mx[pre] - pref[q]); } else { // mi[pre] -> 0 ans[i] = pref[q] - mi[pre]; } } } return ans; } //int main() { //ios_base::sync_with_stdio(0); //cin.tie(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...