Cod sursa(job #971458)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 9 iulie 2013 12:39:07
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int Partial[15002],N,M;
void Update(int initial,int value)
{
    int i=initial;
    while(i<=N)
    {
        Partial[i]+=value;
        i+=i&(-i);
    }
}
void Update_with_Substract(int initial,int value)
{
    int i=initial;
    while(i<=N)
    {
        Partial[i]-=value;
        i+=i&(-i);
    }
}
void Read()
{
    int i;
    f>>N>>M;
    for(i=1;i<=N;i++)
    {
        int value;
        f>>value;
        Update(i,value);
    }
}
int Calculate_Sum_from_1(int a)
{
    int i=a,result=0;
    while(i>0)
    {
        result+=Partial[i];
        i-=i&(-i);
    }
    return result;
}
void Calculate_Sum(int a,int b)
{
    g<<Calculate_Sum_from_1(b)-Calculate_Sum_from_1(a-1)<<"\n";
}
void Browse_questions()
{
    int i,T,V,P,Q;
    for(i=1;i<=M;i++)
    {
        bool quest;
        f>>quest;
        if(quest==0)
        {
            f>>T>>V;
            Update_with_Substract(T,V);
        }
        else
        {
            f>>P>>Q;
            Calculate_Sum(P,Q);
        }
    }
}
int main()
{
    Read();
    Browse_questions();
    return 0;
}