Submission #1326724

#TimeUsernameProblemLanguageResultExecution timeMemory
1326724BigBadBullyDistributing Candies (IOI21_candies)C++20
3 / 100
5094 ms7324 KiB
#include "candies.h"

#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define ff first
#define ss second
const int inf = 1e18;
using namespace std;
struct node{
    int pref = 0,sub= 0,sum= 0,suf=0,mxp =0;
    node operator+(node b)
    {
        node res;
        res.sum = sum+b.sum;
        res.pref = min(pref,b.pref+sum);
        res.suf = min(b.suf,suf+b.sum);
        res.mxp=max(mxp,b.mxp+sum);
        res.sub = min({sub,b.sub,suf+b.pref});
        return res;
    }
};

struct seggy{
    int n;
    vector<node> t;
    seggy(int sz){
        n = sz;
        t.resize(2*n,node());
    }
    void update(int i,int x)
    {
        node&a = t[i+=n];
        a.sum = x;
        a.pref=min(x,0ll);
        a.suf = a.pref;
        a.sub = min(0ll,x);
        a.mxp = max(0ll,x);
        for(;i>1;i/=2)
        {
            if(i < (i^1))
            t[i/2]=t[i]+t[i^1]; 
            else
            t[i/2]=t[i^1]+t[i];
        }
            
    }
    node query(int l,int r)
    {
        r++;
        if(l>r)
            return node();
        node res;
        for(l+=n,r+=n;l<r;l/=2,r/=2)
        {
            if(l&1)
                res = res+t[l++];
            if(r&1)
                res = res+t[--r];
        }
        return res;
    }
};

vector<signed> distribute_candies(vector<signed> c, vector<signed> l,
vector<signed> r, vector<signed> v) {
    int n = c.size();
    int q= l.size();
    vector<signed> ans(n);
    for(int i = 0; i < q; i++)
        for(int j = l[i];j <= r[i];j++)
            ans[j] = max(0ll,min<int>(c[j],ans[j]+v[i]));
      
    return ans;
}
#undef int 
#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...