Cod sursa(job #2591613)

Utilizator NashikAndrei Feodorov Nashik Data 30 martie 2020 20:38:41
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int aib[15005],n;
void u(int a,int b){
    for(;a<=n;a+=(a&(-a))){
        aib[a]+=b;
    }
}
int q(int a){
    int sol=0;
    for(;a>=1;a-=(a&(-a))){
        sol+=aib[a];
    }
    return sol;
}
int v[15005];
int main()
{
    int m,a,b,cer;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>v[i];
        u(i,v[i]);
    }
    for(int i=1;i<=m;i++){
        cin>>cer>>a>>b;
        if(cer==1){
            cout<<q(b)-q(a-1)<<"\n";
        }
        else{
            if(v[b]>a){
                v[b]-=a;
                u(b,-a);
            }
            else{
                u(b,-v[b]);
                v[b]=0;
            }
        }
    }
    return 0;
}