Submission #1217589

#TimeUsernameProblemLanguageResultExecution timeMemory
1217589hengliaoDistributing Candies (IOI21_candies)C++20
29 / 100
134 ms16868 KiB
#include "candies.h" #include<bits/stdc++.h> using namespace std; #define F first #define S second #define pb push_back #define vll vector<ll> #define pll pair<ll, ll> typedef long long ll; namespace{ const ll mxN=2e5+5; ll pre[mxN]; ll br[mxN]; ll v[mxN], c[mxN]; vector<array<ll, 3>> stk; vll con; ll timer; ll id(ll tar){ return lower_bound(con.begin(), con.end(), tar)-con.begin(); } ll getsum(ll a, ll b){ return pre[b+1]-pre[a]; } ll getval(ll idx){ ll lef=0, rig=stk.size()-1; ll good=-1; while(lef<=rig){ ll mid=(lef+rig)/2; if(stk[mid][0]>=idx){ good=mid; lef=mid+1; } else{ rig=mid-1; } } if(good==-1){ return pre[timer]; } ll prevbr=stk[good][1]; ll re=pre[timer]-pre[prevbr+1]; if(stk[good][2]==1){ re+=con[idx]; } return re; } } vector<int> distribute_candies(vector<int> C, vector<int> l, vector<int> r, vector<int> V) { ll n = C.size(); ll q=l.size(); for(ll i=0;i<n;i++){ c[i]=C[i]; con.pb(c[i]); } pre[0]=0; for(ll i=0;i<q;i++){ v[i]=V[i]; pre[i+1]=pre[i]+v[i]; } sort(con.begin(), con.end()); con.erase(unique(con.begin(), con.end()), con.end()); for(ll i=0;i<q;i++){ timer=i; // cout<<"i: "<<i<<'\n'; // cout<<"stk: "<<'\n'; // for(auto &it:stk){ // cout<<it[0]<<' '<<it[1]<<' '<<it[2]<<'\n'; // } // for(ll j=0;j<(ll) con.size();j++){ // cout<<con[j]<<" val: "<<getval(j)<<'\n'; // } if(v[i]>0){ ll lef=0, rig=(ll) con.size()-1; ll good=-1; auto check=[&](ll tar){ if(con[tar]-getval(tar)>v[i]){ return true; } return false; }; while(lef<=rig){ ll mid=(lef+rig)/2; if(check(mid)){ good=mid; rig=mid-1; } else{ lef=mid+1; } } if(good==-1){ br[i]=n; while(!stk.empty() && stk.back()[0]<=n){ stk.pop_back(); } stk.pb({n, i, 1}); } else{ good--; if(good>=0){ br[i]=good; while(!stk.empty() && stk.back()[0]<=br[i]){ stk.pop_back(); } stk.pb({br[i], i, 1}); } } } else{ ll lef=0, rig=(ll) con.size()-1; ll good=-1; auto check=[&](ll tar){ if(getval(tar)>-v[i]){ return true; } return false; }; while(lef<=rig){ ll mid=(lef+rig)/2; if(check(mid)){ good=mid; rig=mid-1; } else{ lef=mid+1; } } if(good==-1){ br[i]=n; while(!stk.empty() && stk.back()[0]<=n){ stk.pop_back(); } stk.pb({n, i, 0}); } else{ good--; if(good>=0){ br[i]=good; while(!stk.empty() && stk.back()[0]<=br[i]){ stk.pop_back(); } stk.pb({br[i], i, 0}); } } } } timer=q; vll a(n); for(ll i=0;i<n;i++){ a[i]=getval(id(c[i])); } vector<int> re(n); for(ll i=0;i<n;i++){ re[i]=a[i]; } return re; }
#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...