Cod sursa(job #3368272)

Utilizator CosminPirlogCosmin CosminPirlog Data 14 octombrie 2026 09:05:47
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
const int NMAX=15e3;
int aint[4*NMAX+1];
int a[NMAX+1];
int ans=0;
void build(int node,int l,int r){
    if(l==r){
        aint[node]=a[l];
    }else{
        int mid=(l+r)/2;
        build(2*node,l,mid);
        build(2*node+1,mid+1,r);
        aint[node]=aint[2*node]+aint[2*node+1];
    }
}
void update(int node,int l,int r,int pos,int val){
    if(l==r){

        aint[node]=max(0,aint[node]-val);
        //cout<<pos<<" "<<aint[node]<<"\n";
    }else{
        int mid=(l+r)/2;
        if(mid>=pos){
            update(2*node,l,mid,pos,val);
        }
        if(mid<pos){
            update(2*node+1,mid+1,r,pos,val);
        }
        aint[node]=aint[2*node]+aint[2*node+1];
    }
}
void query(int node,int l,int r,int &st,int &dr){
    if(r < st || dr < l){
        return;
    }

    if(l >= st && r <= dr){
        ans += aint[node];
        return;
    }
        int mid=(l+r)/2;
        query(2*node,l,mid,st,dr);
        query(2*node+1,mid+1,r,st,dr);
    
}
int main() {
	int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    build(1,1,n);
    for(int i=0;i<m;i++){
        int t,x,y;
        cin>>t>>x>>y;
        if(t){
            ans=0;
            query(1,1,n,x,y);
            //cout<<x<<" "<<y;
            cout<<ans<<'\n';
        }else{
            update(1,1,n,x,y);
        }
    }
}