Cod sursa(job #2321056)

Utilizator AlexandruPaulSirbu Alex AlexandruPaul Data 15 ianuarie 2019 17:17:19
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <iostream>
#include <fstream>
using namespace std;
const int Maxx=15002;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,querry;
int i,type,a,b,x;
int aib[Maxx];
void update(int poz,int val);
int gb(int n);
int query(int a,int b);
int sum(int poz);
void build(int poz,int val);
int main() {
    fin>>n>>querry;
    for (i=1;i<=n;++i){
        fin>>x;
        build(i,x);
    }
    for (;querry;--querry){
        fin>>type>>a>>b;
        if (type==0) update(a,b);
        else fout<<query(a,b)<<"\n";
    }
    return 0;
}
void update(int poz,int val){
    int i;
    for (i=poz;i<=n;i+=gb(i)){
        aib[i]-=val;
    }
}
void build(int poz,int val){
    int i;
    for (i=poz;i<=n;i+=gb(i)){
        aib[i]+=val;
    }
}
int gb(int n){
    return (n & (n^(n-1)));
}
int query(int a,int b){
    return sum(b)-sum(a-1);
}
int sum(int poz){
    int i,sm=0;
    for (i=poz;i>0;i-=gb(i)){
        sm+=aib[i];
    }
    return sm;
}