Cod sursa(job #2268550)

Utilizator T_george_TGeorge Teodorescu T_george_T Data 24 octombrie 2018 22:37:47
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
#define dim 100001
int pos,val,start,finish,maxim,n,m;
int v[4*dim+66];
int Maxim(int n,int m){
    if(n>m)
        return n;
    return m;
}
void update(int nod,int left,int right){

    if(left==right){
        v[nod]=val;
        return ;
    }
       int mij=(left+right)/2;
       if(pos<=mij)
        update(2*nod,left,mij);
        else
        update(2*nod+1,mij+1,right);
    v[nod]=Maxim(v[2*nod],v[2*nod+1]);
}
void query(int nod,int left,int right){
    if(start<=left && right<=finish){
        if(maxim<v[nod])
            maxim=v[nod];
            return;
    }
        int mij=(left+right)/2;
        if(start<=mij)
            query(nod*2,left,mij);
        if(mij<finish)
            query(nod*2+1,mij+1,right);
}
int main()
{  int i,j,b,x,a;
    in>>n>>m;
    for(i=1;i<=n;i++){
            in>>a;
            val=a;
    pos=i;
        update(1,1,n);
    }
        for(i=1;i<=m;i++){
                in>>x>>a>>b;
        if(x){
            pos=a;
         val=b;
            update(1,1,n);
        }
        else{
            start=a;
            finish=b;
            maxim=-1;
            query(1,1,n);
            out<<maxim<<endl;
        }
    }
    return 0;
}