Cod sursa(job #2497706)

Utilizator SoranaAureliaCatrina Sorana SoranaAurelia Data 23 noiembrie 2019 10:23:19
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
using namespace std;

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

int n, m;
long long aib[15005];
int tip;
int a, b;

int zeroz(int x){
    return (x^(x-1)&x);
}

void adaugare(int i, int x)
{
    while(i<=n)
    {
        aib[i]+=x;
        i+=zeroz(i);
    }
}

void achitare(int i, int x){
    while(i<=n){
        aib[i]-=x;
        i+=zeroz(i);
    }
}

long long suma(int i){
    long long s=0;
    while(i>=1){
        s+=aib[i];
        i-=zeroz(i);
    }
    return s;
}
int main()
{
    f>>n>>m;
    for(int i=1; i<=n; i++){
        f>>a;
        adaugare(i,a);
    }
    for(int i=1; i<=m;i++){
        f>>tip>>a>>b;
        if(tip==0)
            achitare(a,b);
        else g<<suma(b)-suma(a-1)<<'\n';
    }
    return 0;
}