Cod sursa(job #2445469)

Utilizator Stefan_PiscuPiscu Stefan Constantin Stefan_Piscu Data 4 august 2019 11:06:49
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
using namespace std;

#define zeros(x) (x^(x-1))&x
#define NMAX 15003
#define MMAX 100003

ifstream fin("datorii.in");
ofstream fout("datorii.out");

long long n, v[NMAX], aib[NMAX], m;

void add(int x, int val)
{
    for(int i=x;i<=n;i+=zeros(i))
        aib[i]+=val;
}

long long sumUp(int x)
{
    long long sum=0;
    //fout<<"( ";
    for(int i=x;i>0;i-=zeros(i))
    {
        //fout<<aib[i]<<"/"<<i<<" ";
        sum+=aib[i];
    }
    //fout<<") ";
    return sum;
}

long long solve(int p, int q)
{
    //fout<<q<<" "<<sumUp(q)<<" "<<p-1<<" "<<sumUp(p-1)<<"\n";
    return sumUp(q)-sumUp(p-1);

}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;++i)
    {
        fin>>v[i];
        add(i, v[i]);
    }
    for(int i=1;i<=m;++i)
    {
        int ok, p, q;
        fin>>ok>>p>>q;
        if(ok)
            fout<<solve(p, q)<<"\n";
        else v[p]-=q, add(p, -q);
        //for(int j=1;j<=n;++j) fout<<v[j]<<" ";
        //fout<<"\n";
    }
    return 0;
}