Cod sursa(job #3292931)

Utilizator abetAlbert Voiculescu abet Data 9 aprilie 2025 19:41:42
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int AINT[60005],n,m,v[15005],x,y,op;
void build(int st, int dr, int node){
    if(st==dr){
        AINT[node]=v[st];
        return;
    }
    int mij=(st+dr)/2;
    build(st, mij, node*2);
    build(mij+1, dr, node*2+1);
    AINT[node]=AINT[node*2]+AINT[node*2+1];
}
void update(int st, int dr, int node, int pos){
    if(st==dr){
        AINT[node]=v[pos];
        return;
    }
    int mij=(st+dr)/2;
    if(mij<=pos)
        update(st, mij, node*2, pos);
    else
        update(mij+1, dr, node*2+1, pos);
    AINT[node]=AINT[node*2]+AINT[node*2+1];
}
int query(int st, int dr, int node, int p1, int p2){
    if(p1<=st && dr<=p2){
        return AINT[node];
    }
    int mij=(st+dr)/2;
    return (query(st, mij, node*2, p1, p2) + query(mij+1, dr, node*2+1, p1, p2));
}
int main()
{
    in>>n>>m;
    for(int i=1;i<=n;i++){
        in>>v[i];
    }
    build(1, n, 1);
    for(int i=1;i<=m;i++){
        in>>op>>x>>y;
        if(op==0){
            v[y]-=y;
            update(1, n, 1, x);
        }
        else
            out<<query(1, n, 1, x, y)<<'\n';
    }
    return 0;
}