Cod sursa(job #1418137)

Utilizator Liviu98Dinca Liviu Liviu98 Data 11 aprilie 2015 23:28:30
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <cstdio>
#include <fstream>
#define NMax 16000
using namespace std;
int N,M,AIB[NMax];

int bit(int x)
{
    return x&(-x);
}

void Update(int poz,int valoare)
{
    for(int index=poz;index<=N;index+=bit(index))
        AIB[index]+=valoare;
}

void Scade(int poz,int valoare)
{
    for(int index=poz;index<=N;index+=bit(index))
        AIB[index]-=valoare;
}

int Query(int pozitie)
{
    int Suma=0;
    for(int index=pozitie;index>0;index-=bit(index))
        Suma=Suma+AIB[index];
    return Suma;
}

void solve()
{
    int a,b,op;
    scanf("%d%d", &N, &M);
    //ifstream g("datorii.in");
    //ofstream f("datorii.out");

//    g>>N>>M;
    for(int i=1;i<=N;i++)
    {
        scanf("%d", &a);
        //g>>a;
        Update(i,a);
    }
    for(int i=1;i<=M;i++)
    {
        scanf("%d%d%d", &op, &a, &b);
        //g>>op>>a>>b;
        if(op==0)
            Scade(a,b);
        else
            printf("%d\n",Query(b)-Query(a-1));
    }
}

int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    solve();
}