Cod sursa(job #936032)

Utilizator VladMSBonta vlad valentin VladMS Data 5 aprilie 2013 13:26:17
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#define ciudatenia(a) (a&(a-1))^a
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,m;
int arb[15001];

void modifica(int a,int val) {
    while (a<=n)
    {
        arb[a] += val;
        a += ciudatenia(a);
    }
}

int datorie(int a,int b) {
    int s = 0;
    while (b>0)
    {
        s += arb[b];
        b -= ciudatenia(b);
    }
    while (a>0)
    {
        s -= arb[a];
        a -= ciudatenia(a);
    }
    return s;
}

int main()
{
    fin>>n>>m;
    for (int i=1;i<=n;i++)
     {
        int a;
        fin>>a;
        modifica(i,a);
     }
    for (int i=1;i<=m;i++)
     {
        int a,b,tip;
        fin>>tip>>a>>b;
        if (tip == 0)
            modifica(a,-b);
        else
            fout<<datorie(a-1,b)<<'\n';
     }
    return 0;
}