Submission #721122

#TimeUsernameProblemLanguageResultExecution timeMemory
721122uroskDistributing Candies (IOI21_candies)C++17
3 / 100
5053 ms23096 KiB
#include "candies.h" #include <bits/stdc++.h> #define ll int #define pb push_back #define pll pair<ll,ll> #define fi first #define sc second #define dbg(x) cerr<#x<<": "<<x<<endl; using namespace std; #define maxn 200005 ll n,q; ll a[maxn],c[maxn]; vector<pll> t[2*maxn]; ll ls[2*maxn],rs[2*maxn],root = 0,tsz = 0; void init(ll &v,ll tl,ll tr){ t[v].clear(); if(!v) v = ++tsz; if(tl==tr) return; ll mid = (tl+tr)/2; init(ls[v],tl,mid); init(rs[v],mid+1,tr); } void upd(ll v,ll tl,ll tr,ll l,ll r,pll p){ if(l>r||tl>tr||l>tr||tl>r) return; if(tl>=l&&tr<=r){t[v].pb(p);return;} ll mid = (tl+tr)/2; upd(ls[v],tl,mid,l,r,p); upd(rs[v],mid+1,tr,l,r,p); } set<pll> cur; void reshi(ll v,ll tl,ll tr){ for(pll p : t[v]) cur.insert(p); ll mid = (tl+tr)/2; if(tl==tr){ ll i = tl; for(pll p : cur){ a[i]+=p.sc; if(a[i]<0) a[i] = 0; if(a[i]>c[i]) a[i] = c[i]; } goto lol; } reshi(ls[v],tl,mid); reshi(rs[v],mid+1,tr); lol:; for(pll p : t[v]){ cur.erase(cur.find(p)); } } ll d = 400; vector<int> ans; vector<int> distribute_candies(vector<int> C, vector<int> L, vector<int> R, vector<int> VAL) { n = C.size(); q = L.size(); for(ll i = 1;i<=n;i++) c[i] = C[i-1]; sort(a+1,a+1+n); init(root,1,n); for(ll i = 1;i<=q;i++){ ll l = L[i-1] + 1; ll r = R[i-1] + 1; ll val = VAL[i-1]; if(i%d==0){ reshi(root,1,n); init(root,1,n); } upd(root,1,n,l,r,{i,val}); } reshi(root,1,n); for(ll i = 1;i<=n;i++) ans.pb(a[i]); return ans; }
#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...