Cod sursa(job #2124817)

Utilizator filip.mihalutMihalut Filip filip.mihalut Data 7 februarie 2018 16:59:24
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <iostream>
#include <fstream>
#define dim 15004

using namespace std;

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

int arb[4*dim + 5], x, i,n, m, s, caz, a,b;

void update(int st,int dr,int poz,int val,int nod,int semn)
{
    if(st == dr)
    {
        if(semn == 1)
            arb[nod] = val;
        else arb[nod] -= val;
        return;
    }

    int m = (st + dr) / 2;

    if(poz <= m) update(st,m,poz,val,2*nod,semn);
    else update(m + 1, dr,poz,val,2*nod + 1,semn);

    arb[nod] = arb[2*nod + 1] + arb[2*nod];
}

inline void query(int st,int dr,int a,int b,int nod)
{
    if(a <= st && dr <= b)
    {
        s += arb[nod];
        return;
    }

    int m = (st + dr) / 2;
    if(a <= m)
        query(st,m,a,b,2*nod);

    if(m < b)
        query(m + 1,dr,a,b,2*nod + 1);
}

int main()
{
    f >> n >> m;

    for(i = 1; i <= n; i++)
    {
        f >> x;
        update(1,n,i,x,1,1);
    }

    for(i = 1; i <= m; i++)
    {
        f >> caz >> a >> b;
        if (caz == 0)
            update(1,n,a,b,1,-1);
        else
        {
            s = 0;
            query(1,n,a,b,1);
            g << s << '\n';
        }
    }
    return 0;
}