Submission #1059326

#TimeUsernameProblemLanguageResultExecution timeMemory
1059326TrentDistributing Candies (IOI21_candies)C++17
0 / 100
5060 ms24776 KiB
#include "candies.h" #include "bits/stdc++.h" using namespace std; #define forR(i, x) for(int i = 0; i < (x); ++i) #define REP(i, a, b) for(int i = (a); i < (b); ++i) typedef long long ll; typedef vector<int> vi; typedef vector<vi> vvi; std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l, std::vector<int> r, std::vector<int> v) { int n=c.size(), m=l.size(); vi ch(m); vvi addOp(n), remOp(n); forR(i, m) { addOp[l[i]].push_back(i); if(r[i] + 1 < n) remOp[r[i]+1].push_back(i); } vi ret(n); forR(i, n) { for(int j : addOp[i]) ch[j] = v[j]; for(int j : remOp[i]) ch[j] = 0; // [besInd, n) has NO interval <= -c or >= c int besInd=n; ll uc=0, dc=0; for(int j = n-1; j >= 0; --j) { uc = max(uc + ch[j], 0ll); dc = min(dc + ch[j], (ll) c[i]); if(uc >= c[i] || dc <= -c[i]) break; else besInd = j; } // cerr << i << ": \n"; // for(int j : ch) cerr << j << ' '; // cerr << '\n'; // cerr << besInd << ' ' << uc << ' ' << dc << '\n'; if(uc >= c[i]) { assert(dc >= -c[i]); int cur = c[i]; REP(j, besInd, n) { cur = min(c[i], cur + ch[j]); assert(cur >= 0); } ret[i] = cur; } else { assert(besInd == 0 || dc <= -c[i]); int cur = 0; REP(j, besInd, n) { cur = max(0, cur + ch[j]); assert(cur <= c[i]); } ret[i] = cur; } } return ret; }
#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...