Submission #596752

#TimeUsernameProblemLanguageResultExecution timeMemory
596752serizeDistributing Candies (IOI21_candies)C++17
3 / 100
112 ms8124 KiB
#include "candies.h" #include <bits/stdc++.h> #include <cassert> #include <cstdio> #include <vector> using namespace std; const int MAX = 2e5+2; vector<int> abi(MAX); void add(int k, int v){ while(k < MAX){ abi[k] += v; k += k&(-k); } } int read(int k){ int s = 0; while(k > 0){ s += abi[k]; k -= k&(-k); } return s; } 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(); int q = l.size(); std::vector<int> s(n); if(q <= 2000){ for(int i = 0; i < q; i++){ for(int j = l[i]; j <= r[i]; j++){ if(v[i] < 0) s[j] = max(0,s[j]+v[i]); else s[j] = min(c[j],s[j]+v[i]); } } } else{ for(int i = 0; i < q; i++){ add(l[i]+1,v[i]); add(r[i]+2,-v[i]); } for(int i = 0; i < n; i++){ s[i] = min(c[i],read(i+1)); } } 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...