Cod sursa(job #3349059)

Utilizator DunareTanasescu Luca-Ioan Dunare Data 25 martie 2026 11:07:36
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#include <fstream>

#define zeros(x) ((x^(x-1))&x)

using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
const int NMAX = 15001;
int N,Q;
int AIB[NMAX], v[NMAX];
void initializare()
{
    for(int i=1;i<=N;i++)
    {
        AIB[i]+=v[i];
        int j=i+(i&-i);
        if(j<=N)
            AIB[j]+=AIB[i];
    }
}
void Add(int x, int quantity)
{
    for(int i=x;i<=N;i+=zeros(i))
        AIB[i]+=quantity;
}
int Compute(int x)
{
    int i, ret=0;
    for(i=x;i>0;i-=zeros(i))
        ret+=AIB[i];
    return ret;
}
int main()
{
    int caz, a, b;
    f>>N>>Q;
    for(int i=1;i<=N;i++)
        f>>v[i];
    initializare();
    for(int i=1;i<=Q;i++)
    {
        f>>caz>>a>>b;
        if(caz==1)
            g<<Compute(b)-Compute(a-1)<<'\n';
        else Add(a,-b);
    }
    return 0;
}