Submission #1341867

#TimeUsernameProblemLanguageResultExecution timeMemory
1341867alexander707070Distributing Candies (IOI21_candies)C++17
Compilation error
0 ms0 KiB
#include<bits/stdc++.h>
#define MAXN 1000007
using namespace std;

const int inf=1e9+7;

int n,q;
long long s,sum[MAXN];
vector<int> curr;

struct SegmentTree{

    struct node{
        int minv,maxv;
        int lazy;

        inline friend node operator + (node fr,node sc){
            node res={min(fr.minv,sc.minv),max(fr.maxv,sc.maxv),0};

            return res;
        }
    };

    node tree[4*MAXN];
    int cap;

    void add(int v,int val){
        tree[v].lazy+=val;
        tree[v].minv+=val;
        tree[v].maxv+=val;
    }

    void psh(int v){
        if(tree[v].lazy==0)return;

        tree[2*v].minv+=tree[v].lazy;
        tree[2*v].maxv+=tree[v].lazy;
        tree[2*v].lazy+=tree[v].lazy;

        tree[2*v+1].minv+=tree[v].lazy;
        tree[2*v+1].maxv+=tree[v].lazy;
        tree[2*v+1].lazy+=tree[v].lazy;

        tree[v].lazy=0;
    }

    void update(int v,int l,int r,int ll,int rr,int s){
        if(ll>rr)return;

        if(l==ll and r==rr){
            add(v,s);

        }else{
            int tt=(l+r)/2;
            psh(v);

            update(2*v,l,tt,ll,min(tt,rr),s);
            update(2*v+1,tt+1,r,max(tt+1,ll),rr,s);

            tree[v] = tree[2*v] + tree[2*v+1];
        }
    }

    int getv(int v,int l,int r,int pos){
        if(l==r){
            return tree[v].lazy;
        }else{
            int tt=(l+r)/2;
            psh(v);

            if(pos<=tt)return getv(2*v,l,tt,pos);
            else return getv(2*v+1,tt+1,r,pos);
        }
    }
    
    void fix(int v,int l,int r){
        if(tree[v].minv>=0 and tree[v].maxv<=cap)return;

        int tt=(l+r)/2;

        if(tree[v].maxv<0){
            add(v,-tree[v].maxv);            
        }

        if(tree[v].minv>cap){
            add(v,cap-tree[v].minv);
        }

        psh(v);
        fix(2*v,l,tt);
        fix(2*v+1,tt+1,r);

        tree[v]=tree[2*v]+tree[2*v+1];
    }
}seg;

vector<int> distribute_candies(vector<int> c,vector<int> l,vector<int> r,vector<int> v){


    n=int(c.size()); q=int(l.size());
    seg.cap = c[0];
    
    for(int i=0;i<q;i++){
        seg.update(1,1,n,l[i]+1,r[i]+1,v[i]);
        seg.fix(1,1,n);
    }

    curr.resize(n);
    for(int i=0;i<n;i++){
        curr[i]=seg.getv(1,1,n,i+1);
    }

    return curr;
}

int main(){

    auto s = distribute_candies({15, 15, 15}, {0, 0}, {2, 1}, {20,20});
    for(auto i:s){
        cout<<i<<" ";
    }


    return 0;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccUhOMM4.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccajFnp8.o:candies.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status