Cod sursa(job #1899312)

Utilizator MCDanutMiron Claudiu Danut MCDanut Data 2 martie 2017 17:24:37
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int x[400004];
void update(int n, int z, int y, int val, int pos){
    if(z==y)
        x[n]=val;
else{
    int m= (z+y)/2;
    if(pos<=m)  update(2*n,z,m,val,pos);
    else    update(2*n+1,m+1,y,val,pos);
    x[n]=x[2*n]+x[2*n+1];

}


}
int caut(int n,int z, int y,int a, int b){
    if(z==a&&y==b)
        return x[n];
    else{
        int m=(z+y)/2;
        if(m<=a)
            return caut(2*n+1,m+1,y,a,b);
        if(m>=b)
            return caut(2*n,z,m,a,b);
        if(m>=a&&m<=b)
            return caut(2*n,z,n,a,b)+caut(2*n+1,m+1,y,a,b);






    }





}


int main()
{
    int m,n,i;
    fin>>n>>m;
    for(i=1;i<=n;i++){
        int y;
        fin>>y;
        update(1,1,n,y,i);
    }
    for(i=1;i<=m;i++){
        int p,a,b;
        fin>>p>>a>>b;
        if(p==0)
            fout<<caut(1,1,n,a,b)<<endl;
        else
            update(1,1,n,b,a);


    }


    return 0;
}