Cod sursa(job #2209758)

Utilizator aditoma2001Toma Adrian aditoma2001 Data 4 iunie 2018 17:18:54
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

bool Test;
int n, m, a[15001], st, dr, poz, x, val;

int lsb(int n)
{
    return (n &(-n));
}

int sum(int st, int dr)
{
    int s1 = 0, s2 = 0;
    while (dr)
    {
        s1 += a[dr];
        dr -=lsb(dr);
    }
    st--;
    while (st)
    {
        s2 += a[st];
        st -=lsb(st);
    }
    return (s1 - s2);
}

int update(int i, int k)
{
    while (i <= n)
    {
        a[i] +=k;
        i += lsb(i);
    }
}

int main()
{
    fin >> n >> m;
    for (int i = 1; i <= n; ++i)
    {
        fin >> x;
        update(i, x);
    }
    for (int i = 1; i <= m; ++i)
    {
        fin >> Test;
        if (Test)
        {
            fin >> st >> dr;
            fout << sum(st, dr) << '\n';
        }
        else
        {
            fin >> poz >> val;
            update(poz, -val);
        }
    }
    return 0;
}