Cod sursa(job #943454)

Utilizator CosminRusuCosmin Rusu CosminRusu Data 25 aprilie 2013 15:39:21
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int a[15005];
int n, m;
void adauga(int poz, int val)
{
    while(poz<=n)
    {
        a[poz]+=val;
        poz += (poz^(poz-1)) & poz;
    }
}
void achita(int poz, int val)
{
    while(poz<=n)
    {
        a[poz]-=val;
        poz += (poz^(poz-1)) & poz;
    }
}
int cat(int poz)
{
    int sum=0;
    while( poz )
    {
        sum += a[poz];
        poz -= (poz^(poz-1)) & poz;
    }
    return sum;
}
int main()
{
    cin>>n>>m;
    for(int i = 1; i <= n ; ++ i)
    {
            int x;
            cin>>x;
            adauga(i, x);
    }
    for( int i = 1 ; i <= n ; ++ i)
    {
        bool tip;
        cin>>tip;
        if(tip == false)
        {
            int x, poz;
            cin>>poz>>x;
            achita(poz, x);
        }
        else
        {
            int p, q;
            cin>>p>>q;
            cout<<cat(q)-cat(p-1)<<"\n";
        }
    }
    return 0;
}