Cod sursa(job #1017417)

Utilizator DaniEsDani Stetcu DaniEs Data 27 octombrie 2013 19:19:05
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#define NMax 100005
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int N, M, S[NMax];
void Update1(int  P,int V)
{
    for(int i=P;i<=N;i+=i&(-i))
        S[i]+=V;
}
void Update2 (int P, int V)
{
    for(int i=P; i<=N; i+=i&(-i))
        S[i]-=V;
}
int Query(int P)
{
    int Sum=0;
    for(int i=P;i>0; i-=i&(-i))
        Sum+=S[i];
    return Sum;
}
int main()
{
    fin>>N>>M;
    for(int i=1;i<=N;i++)
    {
        int X;
        fin>>X;
        Update1(i,X);
    }
    while(M--)
    {
        int op,a,b;
        fin>>op>>a>>b;
        if(op==0)
        {
            Update2(a, b);
        }
        if(op==1)
        {
            fout<<Query(b)-Query(a-1)<<"\n";
        }
    }
    return 0;
}