Cod sursa(job #2615653)

Utilizator Razvank206Dumitriu Razvan Razvank206 Data 15 mai 2020 08:41:53
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
#define N 15001
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");

int n, m, a[N] , v[N], val, index, i, m1, m2, sum, op;

void operatieA(int s, int d, int x)
{
    if(s == d)
    {
       v[x] += a[i];
       return;
    }

    int mijl = (s + d) / 2;

    if(index <= mijl)
        operatieA(s, mijl, 2*x);
    else
        operatieA(m+1, d, 2*x +1);

    v[x] = v[2*x] + v[2*x +1];

}

void operatieB(int s, int d, int x)
{
    if(m1 <= s && m2 >= d)
        {
            sum += v[x];
            return;
        }
    int mijl = (s+d)/2;
    if(m1<=m)
        operatieB(s, mijl, x*2);
    else
        operatieB(mijl+1, d, x*2+1);

}

int main()
{
    f >> n >> m;
    for( i=1; i<=n; i++)
    {
        f >> a[i];
        index = i;
        operatieA(1,n,1);

    }

    for(i=1; i<=m; i++)
    {
        f>> op >> m1 >> m2;
        if(op)
            {
            sum=0;
            operatieB(1,n, 1);
            g << sum << '\n';
        }
        else{
            a[m1] -=m2;
            operatieA(1, n, 1);
        }
    }

    return 0;
}