Cod sursa(job #3246942)

Utilizator vladneaguvladCristianoRonaldo vladneagu Data 4 octombrie 2024 20:35:35
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <vector>
#define int long long
using namespace std;
vector <int> bit;
int n,q;
void update1(int i,int x){
    while(i<=n){
        bit[i]+=x;
        i=i+(i&-i);
    }
}
void update2(int i,int x){
    while(i<=n){
        bit[i]-=x;
        i=i+(i&-i);
    }
}
int sumx(int poz){
    int sum=0;
    while(poz>0){
        sum=sum+bit[poz];
        poz=poz-(poz&-poz);
    }
    return sum;
}
int rangesquery(int lr,int rl){
    return sumx(rl)-sumx(lr-1);
}
signed main()
{
    ifstream cin("datorii.in");
    ofstream cout("datorii.out");
    cin>>n>>q;
    bit.assign(n+1,0);
    for (int i =1; i <=n; i++) {
        int val;
        cin>>val;
        update1(i,val);
    }
    for (int i = 1; i <=q; i++) {
        int c,a,b;
        cin>>c>>a>>b;
        if(c==0){
            update2(a,b);
        }else{
            cout<<rangesquery(a,b)<<endl;
        }
    }
    return 0;
}