Cod sursa(job #2428210)

Utilizator AlexBolfaAlex Bolfa AlexBolfa Data 4 iunie 2019 12:42:35
Problema Datorii Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#define MAX 15005
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");

int n,q,Arb[MAX*4],sum;
int poz,val,start,finish;

void read();
void solve();
void Update(int, int, int);
void Query(int, int, int);

int main(){
    read();
    solve();
    return 0;
}
void Query(int nod, int st, int dr){
    if(start<=st&&finish>=dr){
        sum+=Arb[nod];
        return;
    }
    int mij=(st+dr)>>1;

    if(mij>=start)
        Query(nod*2,st,mij);
    if(mij<finish)
        Query(nod*2+1,mij+1,dr);
}

void Update(int nod, int st, int dr){
    if(st==dr){
        Arb[nod]-=val;
        return;
    }
    int mij=(st+dr)>>1;

    if(poz<=mij)
        Update(nod*2,st,mij);
    else
        Update(nod*2+1,mij+1,dr);

    Arb[nod]=Arb[nod*2]+Arb[nod*2+1];
}
void solve(){
    int a,b;
    bool task;
    while(q--){
        fin>>task>>a>>b;
        if(task){
            sum=0, start=a, finish=b;
            Query(1,1,n);
            fout<<sum<<'\n';
        }
        else{
            poz=a, val=b;
            Update(1,1,n);
        }
    }
}
void read(){
    int i,x;
    fin>>n>>q;
    for(i=1;i<=n;++i){
        fin>>x;
        poz=i, val=-x;
        Update(1,1,n);
    }
}