Cod sursa(job #3252302)

Utilizator Ruxandra009Ruxandra Vasilescu Ruxandra009 Data 29 octombrie 2024 10:13:46
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int n, q, v[15005], bc[200], rad, nrb;

int st_bucket(int b)
{
    return (b - 1) * rad + 1;
}

int dr_bucket(int b)
{
    return min(n, b * rad);
}

int find_bucket(int poz)
{
    if(poz % rad == 0)
        return poz / rad;

    return poz / rad + 1;
}

int main()
{
    f >> n >> q;
    rad = sqrt(n);

    nrb = 1;
    for(int i = 1; i <= n; i ++)
    {
        f >> v[i];
        if(i <= dr_bucket(nrb))
            bc[nrb] += v[i];

        if(i == dr_bucket(nrb)) nrb ++;
    }

    for(int i = 1; i <= q; i ++)
    {
        int op, x, y;
        f >> op >> x >> y;
        if(op == 0)
        {
            int b = find_bucket(x);
            bc[b] -= y; v[x] -= y;
        }

        else
        {
            int b1 = find_bucket(x), b2 = find_bucket(y), sumi = 0;
            for(int j = x; j <= dr_bucket(b1); j ++)
                sumi += v[j];

            for(int j = st_bucket(b2); j <= y; j ++)
                sumi += v[j];

            for(int j = b1 + 1; j < b2; j ++)
                sumi += bc[j];

            g << sumi << '\n';
        }
    }
    return 0;
}