Cod sursa(job #2183204)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 22 martie 2018 22:05:02
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
using namespace std;
int aib[15005] , n;
void update(int poz , int val , int sign)
{
    for( ; poz <= n ; poz = poz + (poz&-poz))
        aib[poz] = aib[poz] + val * sign;
}
int query(int poz)
{
    int s = 0;
    for( ; poz > 0 ; poz = poz - (poz&-poz))
        s = s + aib[poz];
    return s;
}
int main()
{
    freopen("datorii.in" , "r" , stdin);
    freopen("datorii.out" , "w" , stdout);
    int m , i , op , a , b , x , sign;
    scanf("%d%d" , &n , &m);
    sign = 1;
    for(i = 1 ; i <= n ; i ++)
    {
        scanf("%d" , &x);
        update(i , x , sign);
    }
    sign = -1;
    for(i = 1 ; i <= m ; i ++)
    {
        scanf("%d%d%d" , &op , &a , &b);
        if(op == 0)
            update(a , b , sign);
        else
            printf("%d\n" , query(b) - query(a - 1));
    }
    return 0;
}