Submission #548466

#TimeUsernameProblemLanguageResultExecution timeMemory
548466FEDIKUSDistributing Candies (IOI21_candies)C++17
Compilation error
0 ms0 KiB
#include "candies.h" #include <vector> using namespace std; typedef long long ll; const ll maxn=2e5+10;const ll inf=1e9+10; struct node{ ll min,max,lazy;}; ll n,q,val=0;vector<pair<ll,ll> > events[maxn];vector<int> vv;node segt[4*maxn]; void ispisi(node a){ //cout<<a.min<<" "<<a.max<<" "<<a.lazy<<"\n";} node comb(node a,node b){ node ret; ret.lazy=0; ret.max=max(a.max,b.max); ret.min=min(a.min,b.min); return ret;} void push(ll ind,ll l,ll r){ if(segt[ind].lazy==0) return; if(l!=r){ segt[2*ind].min+=segt[ind].lazy; segt[2*ind].max+=segt[ind].lazy; segt[2*ind+1].min+=segt[ind].lazy; segt[2*ind+1].max+=segt[ind].lazy; segt[2*ind].lazy+=segt[ind].lazy; segt[2*ind+1].lazy+=segt[ind].lazy; } segt[ind].lazy=0;} void update(ll tl,ll tr,ll v,ll ind=1,ll l=0,ll r=q-1){ push(ind,l,r); if(tl<=l && r<=tr){ segt[ind].lazy+=v; segt[ind].min+=v; segt[ind].max+=v; return; } ll mid=l+(r-l)/2; if(tl<=mid) update(tl,tr,v,2*ind,l,mid); if(tr>mid) update(tl,tr,v,2*ind+1,mid+1,r); segt[ind]=comb(segt[2*ind],segt[2*ind+1]);} node qr(ll tl,ll tr,ll ind=1,ll l=0,ll r=q-1){ push(ind,l,r); if(tl<=l && r<=tr){ return segt[ind]; } ll mid=l+(r-l)/2; node ret={inf,-inf,0}; if(tl<=mid) ret=comb(ret,qr(tl,tr,2*ind,l,mid)); if(tr>mid) ret=comb(ret,qr(tl,tr,2*ind+1,mid+1,r)); return ret;} ll query(ll c){ ll ind=1,l=0,r=q-1,res=-1; ll tmax=-inf,tmin=inf; while(true){ //trazim prvi na kome je razlika <=c if(l==r){ if(max(tmax,segt[ind].max)-min(tmin,segt[ind].min)<=c){ res=l; tmax=max(tmax,segt[ind].max); tmin=min(tmin,segt[ind].min); } break; } if(max(tmax,segt[2*ind+1].max)-min(tmin,segt[2*ind+1].min)<=c){ res=l+(r-l)/2+1; r=l+(r-l)/2; tmax=max(tmax,segt[2*ind+1].max); tmin=min(tmin,segt[2*ind+1].min); ind=2*ind; }else{ ind=2*ind+1; l=l+(r-l)/2+1; } } if(vv[res]>0){ return val-(tmax-c); }else{ return val-tmin; }} vector<int> distribute_candies(vector<int> c, vector<int> l, vector<int> r, vector<int> v) { n=c.size(); q=l.size()+2; l.insert(l.begin(),1); l.insert(l.begin(),1); r.insert(r.begin(),n-1); r.insert(r.begin(),n-1); v.insert(v.begin(),-inf); v.insert(v.begin(),inf); vv=v; for(ll i=0;i<q;i++){ events[l[i]].push_back({i,v[i]}); events[r[i]+1].push_back({i,-v[i]}); } vector<int> ans(n); for(ll i=0;i<n;i++){ for(auto event:events[i]){ val+=event.second; update(event.first,q-1,event.second); } ans[i]=query(c[i]); } return ans;}

Compilation message (stderr)

candies.cpp:1:22: warning: extra tokens at end of #include directive
    1 | #include "candies.h" #include <vector> using namespace std; typedef long long ll; const ll maxn=2e5+10;const ll inf=1e9+10; struct node{    ll min,max,lazy;}; ll n,q,val=0;vector<pair<ll,ll> > events[maxn];vector<int> vv;node segt[4*maxn]; void ispisi(node a){    //cout<<a.min<<" "<<a.max<<" "<<a.lazy<<"\n";} node comb(node a,node b){    node ret;    ret.lazy=0;    ret.max=max(a.max,b.max);    ret.min=min(a.min,b.min);    return ret;} void push(ll ind,ll l,ll r){    if(segt[ind].lazy==0) return;    if(l!=r){        segt[2*ind].min+=segt[ind].lazy; segt[2*ind].max+=segt[ind].lazy;        segt[2*ind+1].min+=segt[ind].lazy; segt[2*ind+1].max+=segt[ind].lazy;        segt[2*ind].lazy+=segt[ind].lazy;        segt[2*ind+1].lazy+=segt[ind].lazy;    }    segt[ind].lazy=0;} void update(ll tl,ll tr,ll v,ll ind=1,ll l=0,ll r=q-1){    push(ind,l,r);    if(tl<=l && r<=tr){        segt[ind].lazy+=v;        segt[ind].min+=v;        segt[ind].max+=v;        return;    }    ll mid=l+(r-l)/2;    if(tl<=mid) update(tl,tr,v,2*ind,l,mid);    if(tr>mid) update(tl,tr,v,2*ind+1,mid+1,r);    segt[ind]=comb(segt[2*ind],segt[2*ind+1]);} node qr(ll tl,ll tr,ll ind=1,ll l=0,ll r=q-1){    push(ind,l,r);    if(tl<=l && r<=tr){        return segt[ind];    }    ll mid=l+(r-l)/2;    node ret={inf,-inf,0};    if(tl<=mid) ret=comb(ret,qr(tl,tr,2*ind,l,mid));    if(tr>mid) ret=comb(ret,qr(tl,tr,2*ind+1,mid+1,r));    return ret;} ll query(ll c){    ll ind=1,l=0,r=q-1,res=-1;    ll tmax=-inf,tmin=inf;    while(true){ //trazim prvi na kome je razlika <=c        if(l==r){            if(max(tmax,segt[ind].max)-min(tmin,segt[ind].min)<=c){                res=l;                tmax=max(tmax,segt[ind].max);                tmin=min(tmin,segt[ind].min);            }            break;        }        if(max(tmax,segt[2*ind+1].max)-min(tmin,segt[2*ind+1].min)<=c){            res=l+(r-l)/2+1;            r=l+(r-l)/2;            tmax=max(tmax,segt[2*ind+1].max);            tmin=min(tmin,segt[2*ind+1].min);            ind=2*ind;                    }else{            ind=2*ind+1;            l=l+(r-l)/2+1;        }    }    if(vv[res]>0){        return val-(tmax-c);    }else{        return val-tmin;    }} vector<int> distribute_candies(vector<int> c, vector<int> l, vector<int> r, vector<int> v) {    n=c.size();    q=l.size()+2;    l.insert(l.begin(),1); l.insert(l.begin(),1);    r.insert(r.begin(),n-1); r.insert(r.begin(),n-1);    v.insert(v.begin(),-inf); v.insert(v.begin(),inf);    vv=v;    for(ll i=0;i<q;i++){        events[l[i]].push_back({i,v[i]});        events[r[i]+1].push_back({i,-v[i]});    }    vector<int> ans(n);    for(ll i=0;i<n;i++){        for(auto event:events[i]){            val+=event.second;            update(event.first,q-1,event.second);        }        ans[i]=query(c[i]);    }    return ans;}
      |                      ^
/usr/bin/ld: /tmp/cc784PtI.o: in function `main':
grader.cpp:(.text.startup+0x30e): undefined reference to `distribute_candies(std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status