Cod sursa(job #2960235)

Utilizator vlad79xVlad79X vlad79x Data 3 ianuarie 2023 19:55:38
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <bits/stdc++.h>
using namespace std;
const int nmax=15e3;
struct AINT {
        int aint[4*nmax+1];
        void update(int nod,int st,int dr,int poz,int val) {
                if(st==dr) {
                        aint[nod]+=val;
                        return;
                }
                int mid=(st+dr)/2;
                if(poz<=mid)
                        update(2*nod,st,mid,poz,val);
                else
                        update(2*nod+1,mid+1,dr,poz,val);
                aint[nod]=aint[2*nod]+aint[2*nod+1];
        }
        int query(int nod,int st,int dr,int st1,int dr1) {
                if(st1<=st&&dr<=dr1)
                        return aint[nod];
                if(dr<st1||dr1<st)
                        return 0;
                int mid=(st+dr)/2;
                return query(2*nod,st,mid,st1,dr1)+query(2*nod+1,mid+1,dr,st1,dr1);
        }
};
int main() {
        ifstream cin("datorii.in");
        ofstream cout("datorii.out");
        int n,q,x,y,t;
        AINT aint;
        cin>>n>>q;
        for(int i=1; i<=n; i++) {
                cin>>x;
                aint.update(1,1,n,i,x);
        }
        for(int i=1; i<=q; i++) {
                cin>>t>>x>>y;
                if(t==0)
                        aint.update(1,1,n,x,-y);
                else
                        cout<<aint.query(1,1,n,x,y)<<'\n';
        }
        return 0;
}