Cod sursa(job #1920088)

Utilizator duesakBourceanu Cristian duesak Data 9 martie 2017 22:24:38
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int v[1700000];
void insertarb(int pz,int val, int lf, int rh,int n){
    if(lf==rh){v[n]=val;return;}
    int mij=(lf+rh)/2;
    if(pz<=mij)insertarb(pz,val,lf,mij,n<<1);
    else insertarb(pz,val,mij+1,rh,(n<<1)+1);
    v[n]=max(v[n<<1],v[(n<<1)+1]);
};
int querry(int a,int b, int lf, int rh, int n){
    if(a<=lf&&b>=rh)return v[n];
    int mij=(lf+rh)/2;
    int nd=0,ns=0;
    if((a>=lf&&a<=mij)||(b>=lf&&b<=mij))ns=querry(a,b,lf,mij,n<<1);
    if((b>=mij+1&&b<=rh)||(a>=mij+1&&a<=rh))nd=querry(a,b,mij+1,rh,(n<<1)+1);
    return max(nd,ns);
}
int main(){
    int n,m,i,x,p,a,b;
    fin>>n>>m;
    for(i=1;i<=n;i++){
        fin>>x;
        insertarb(i,x,1,n,1);
    }
    for(i=1;i<=m;i++){
        fin>>p>>a>>b;
        if(p==0)fout<<querry(a,b,1,n,1)<<'\n';
        if(p==1)insertarb(a,b,1,n,1);
    }
    fin.close();
    fout.close();
    return 0;
}