Cod sursa(job #852867)

Utilizator sternvladStern Vlad sternvlad Data 11 ianuarie 2013 21:05:16
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>

using namespace std;

int a[15001],v[15001],n,m;

void update(int y,int z)
{
    int c=0;
    while (y<=n)
    {
        a[y]-=z;
        while (!(y&(1<<c))) ++c;
        y+=1<<c;
        ++c;
    }
}

int query(int y)
{
    int c=0,s=0;
    while (y>0)
    {
        s+=a[y];
        while (!(y&(1<<c))) ++c;
        y-=(1<<c);
        ++c;
    }
    return s;
}

int main()
{
    int i,x,y,z;
    ifstream fin ("datorii.in");
    ofstream fout ("datorii.out");
    fin>>n>>m;
    for (i=1;i<=n;++i)
    {
        fin>>v[i];
        v[i]+=v[i-1];
    }
    for (i=1;i<=n;++i)
        a[i]=v[i]-v[i-((i^(i-1))&i)];
    for (i=1;i<=m;++i)
    {
        fin>>x>>y>>z;
        if (x)
        {
            int t=query(z)-query(y-1);
            fout<<t;
        }

        else update(y,z);
    }
    return 0;
}