Cod sursa(job #1206898)

Utilizator tudi98Cozma Tudor tudi98 Data 11 iulie 2014 14:06:38
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <iostream>
using namespace std;

int Arb[60004];

void update(int nod,int l,int r,int &Val,int& Pos){

    if(l==r){
        Arb[nod]+=Val;
        return;
    }
    int mid=(l+r)/2;
    if(Pos<=mid) update(nod*2,l,mid,Val,Pos);
    else update(nod*2+1,mid+1,r,Val,Pos);

    Arb[nod]=Arb[nod*2+1]+Arb[nod*2];
}

int query(int nod,int l,int r,int a,int b){
    if(a<=l && b>=r){
        return Arb[nod];
    }
    int mid=(l+r)/2,ret=0;
    if(a<=mid) ret+=query(nod*2,l,mid,a,b);
    if(b>mid) ret+=query(nod*2+1,mid+1,r,a,b);

    return ret;
}


int main (){

    ifstream f("datorii.in");
    ofstream g("datorii.out");

    int n,m,x,y,t,v;
    f >> n >> m;
    for(int i=1;i<=n;i++){
        f >> x;
        update(1,1,n,x,i);
    }
    for(;m;m--){
        f >> t >> x >> y;
        if(t==0){
            y=-y;
            update(1,1,n,y,x);
        }
        else{
            g << query(1,1,n,x,y) << "\n";
        }
    }
}