Cod sursa(job #2626346)

Utilizator StefanaArinaStefana Arina Tabusca StefanaArina Data 6 iunie 2020 13:45:37
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
	
#include<iostream>
#include<fstream>
 
using namespace std;
 
ifstream f("datorii.in");
ofstream g("datorii.out");
 
int ai[170000], s;
 
void build(int x, int st, int dr, int poz,int nr)
{
 
    if(st == dr)  //am gasit poz din ai
        ai[x] += nr;
    else
    {
        int m = (dr + st) / 2;
 
        if(m < poz) build(2 * x + 1, m + 1, dr, poz, nr);

        else
            build(2 * x, st, m, poz, nr);
 
        ai[x] = ai[2 * x + 1] + ai[2 * x];
    }
 
}
 
void get_sum(int x, int st, int dr, int a,int b)
{
 if (st > dr or a > dr or b < st) return;
 
    if(a <= st and dr <= b)
        s += ai[x];
    else if(st < dr)
    {
        int m = (st + dr) / 2;
 
        get_sum(2 * x, st, m, a, b);
        get_sum(2 * x + 1, m + 1, dr, a, b);
    }
 
}
int main()
{
    int n, m, i, a, b, x;
    bool y;
 
    f >> n >> m;
 
    for(i = 1; i <= n; i++)
    {
        f >> x;
        build(1, 1, n, i, x);
    }
 
    for(i = 1; i <= m; i++)
    {
        f >> y >> a >> b;
 
        if(!y)
           build(1, 1, n, a, - b);
        else
        {
            s = 0;
            get_sum(1, 1, n, a, b);
            g << s << '\n';
        }
    }
 
    return 0;
 
}