Cod sursa(job #2424079)

Utilizator derihvist28Derihvist Adelina derihvist28 Data 22 mai 2019 16:29:32
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <bits/stdc++.h>
using namespace std;
 
int n, m, i, x, sum, op, a, b;
int v[60005];
 
void add(int nod, int st, int dr, int a, int b)
{
    if (a<=st && dr<=b)
        v[nod] = x;
    else
        {
          int m1 = (st+dr)/2;
          if (a <= m1)
           add(2*nod, st, m1, a, b);
          if (b > m1)
           add(2*nod+1, m1+1, dr, a, b);
          v[nod] = v[2*nod] + v[2*nod+1];
       }
}
 
void up(int nod, int st, int dr, int a, int b)
{
    if (a<=st && dr<=b)
        v[nod] -= x;
    else
         {
           int m1 = (st+dr)/2;
           if (a <= m1)
            up(2*nod, st, m1, a, b);
           if (b > m1)
            up(2*nod+1, m1+1, dr, a, b);
           v[nod] = v[2*nod] + v[2*nod+1];
        }
}
 
void qy(int nod, int st, int dr, int a, int b)
{
    if (a<=st && dr<=b)
        sum += v[nod];
    else
    {
        int m1 = (st+dr)/2;
        if (a <= m1)
            qy(2*nod, st, m1, a, b);
        if (b > m1)
            qy(2*nod+1, m1+1, dr, a, b);
    }
}
 
int main()
{
	ifstream cin ("datorii.in");
    ofstream cout ("datorii.out");
    cin>>n>>m;
 
    for (i=1;i<=n;i++)
    {
        cin>>x;
        add(1, 1, n, i, i);
    }
 
    for (i=1;i<=m;i++)
    {
        cin>>op>>a>>b;
        if (op == 0)
        {
            x = b;
            up(1, 1, n, a, a);
        }
        else
        {
           sum = 0;
           qy(1, 1, n, a, b);
           cout<<sum<<endl;
        }
    }
    return 0;
}