Submission #1270921

#TimeUsernameProblemLanguageResultExecution timeMemory
1270921nerrrminDistributing Candies (IOI21_candies)C++20
8 / 100
122 ms11592 KiB
#include "candies.h"

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5;
int n, q;
long long t[maxn * 4];
long long ql, qr, upd_val;
void update(int i, int l, int r)
{
    if(qr < l || ql > r)return;
    if(ql <= l && r <= qr)
    {
        t[i] += upd_val;
        return;
    }
    int mid = (l + r)/2;
    update(2*i, l, mid);
    update(2*i+1, mid+1, r);
}
int pos;
long long collect(int i, int l, int r)
{
    if(l == r)
    {
        return t[i];
    }
    int mid = (l + r)/2;
    if(pos <= mid)return t[i] + collect(2*i, l, mid);
    else return t[i] + collect(2*i+1, mid+1, r);
}
std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l,
                                    std::vector<int> r, std::vector<int> v) {
    n = c.size();
    q = l.size();
    std::vector<int> s(n, 0);
    for (int i = 0; i < q; ++ i)
    {
        ql = l[i];
        qr = r[i];
        upd_val = v[i];
        update(1, 0, n-1);
    }
    for (int i = 0; i < n; ++ i)
    {
        pos = i;
        s[i] = min(1LL * c[i], collect(1, 0, n-1));
    }
    return s;
}
#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...