Cod sursa(job #2649997)

Utilizator mihhTURCU MIHNEA ALEXANDRU mihh Data 17 septembrie 2020 07:27:03
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

int n;
vector<int> ai;

void update(int ind, int val, int le=0, int ri=n, int pos=1){
    ai[pos]+=val;
    if(le==ri) return;
    int mid=(le+ri)/2;
    if(ind<=mid) update(ind,val, le,mid, 2*pos);
    else update(ind,val, mid+1, ri, 2*pos+1);
}

int query(int a, int b, int le=0,int ri=n, int pos=1){
    if(a==le and b==ri) return ai[pos];
    int ans=0, mid=(le+ri)/2;
    if(a<=mid) ans+=query(a,min(b,mid), le,mid, 2*pos);
    if(b>mid) ans+=query(max(a,mid+1),b, mid+1,ri, 2*pos+1);
    return ans;
}

int main() {
    int m; fin>>n>>m;
    ai.resize(4*n+1);
    for(int i=1;i<=n;++i){
        int x; fin>>x;
        update(i,x);
    }
    for(int i=1;i<=m;++i){
        int t, x,y;
        fin>>t>>x>>y;
        if(t==0) update(x,-y);
        else fout<<query(x,y)<<"\n";
    }
}