Cod sursa(job #2424097)

Utilizator derihvist28Derihvist Adelina derihvist28 Data 22 mai 2019 16:40:41
Problema Datorii Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <fstream>
using namespace std;
 
int n, m, i, x, sum, op, a, b;
int v[60007];
 
ifstream f("datorii.in");
ofstream g("datorii.out");
 
void add(int nod, int st, int dr, int a, int b)
{
    if (a<=st && dr<=b)
        v[nod] = x;
    else
    {
        int mij = (st+dr)/2;
        if (a <= mij)
            add(2*nod, st, mij, a, b);
        if (b > mij)
            add(2*nod+1, mij+1, dr, a, b);
        v[nod] = v[2*nod] + v[2*nod+1];
    }
}
 
void update(int nod, int st, int dr, int a, int b)
{
    if (a<=st && dr<=b)
        v[nod] -= x;
    else
    {
        int mij = (st+dr)/2;
        if (a <= mij)
            update(2*nod, st, mij, a, b);
        if (b > mij)
            update(2*nod+1, mij+1, dr, a, b);
        v[nod] = v[2*nod] + v[2*nod+1];
    }
}
 
void query(int nod, int st, int dr, int a, int b)
{
    if (a<=st && dr<=b)
        sum += v[nod];
    else
    {
        int mij = (st+dr)/2;
        if (a <= mij)
            query(2*nod, st, mij, a, b);
        if (b > mij)
            query(2*nod+1, mij+1, dr, a, b);
    }
}
 
int main()
{
    f>>n>>m;
 
    for (i=1;i<=n;i++)
    {
        f>>x;
        add(1, 1, n, i, i);
    }
 
    for (i=1;i<=m;i++)
    {
        f>>op>>a>>b;
        if (op == 0)
        {
            x = b;
            update(1, 1, n, a, a);
        }
        else
        {
           sum = 0;
           query(1, 1, n, a, b);
           g<<sum<<"\n";
        }
    }
 
    f.close();
    g.close();
    return 0;
}