Cod sursa(job #2250677)

Utilizator danielsociuSociu Daniel danielsociu Data 30 septembrie 2018 15:41:40
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
std::ifstream cin("datorii.in");
std::ofstream cout("datorii.out");
using namespace std;
#define maxn 15005
int arb[maxn*4];
int N,M,val,start,finish,pos,sol;

void update(int nod, int st, int dr){
    if(st==dr){
        arb[nod]+=val;
        return;
    }
    int mij=(st+dr)/2;
    if(pos<=mij)
        update(nod*2,st,mij);
    else
        update(nod*2+1, mij+1,dr);
    arb[nod]=arb[nod*2]+arb[nod*2+1];
}
void querry(int nod, int st,int dr){
    if(st>=start&&finish>=dr){
        sol+=arb[nod];
        return;
    }
    int mij=(st+dr)/2;
    if(start<=mij)
        querry(nod*2,st, mij);
    if(finish>mij)
        querry(nod*2+1,mij+1,dr);
}

int main()
{
    int tip;
	cin>>N>>M;
	for(int i=1;i<=N;i++){
        cin>>val; pos=i;
        update(1,1,N);
	}
	for(;M--;){
        cin>>tip;
        if(tip){
            sol=0;
            cin>>start>>finish;
            querry(1,1,N);
            cout<<sol<<'\n';
        }else{
            cin>>pos>>val;
            val=-val;
            update(1,1,N);
        }
	}
	return 0;
}