Cod sursa(job #1969386)

Utilizator popescu.octavianPopescu Octavian popescu.octavian Data 18 aprilie 2017 14:04:55
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>
#define zerouri(x) ((x^(x-1))&x)
#define NMax 15005
using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int N, M, i, x, a, b, tip, v[NMax];

void Update (int x, int val, int tip)
{
    for(int i=x; i<=N; i+=zerouri(i))
        if(tip==1)
            v[i]+=val;
            else v[i]-=val;
}
int Query(int x)
{
    int ans=0;
    for(int i=x; i>0; i-=zerouri(i))
        ans+=v[i];
    return ans;
}
int main()
{
    f>>N>>M;
    for(i=1; i<=N; i++)
    {
        f>>x;
        Update(i,x,1);
    }
    for(i=1; i<=M; i++)
    {
        f>>tip>>a>>b;
        if(tip==0) Update(a,b,2);
        else g<<Query(b)-Query(a-1)<<'\n';
    }
    return 0;
}