Cod sursa(job #1147741)

Utilizator Claudiu95Vartolomei Alexandru Claudiu Claudiu95 Data 20 martie 2014 08:52:36
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <fstream>
#define maxx 100004
#define valm 1000000005
#include<algorithm>
#include<math.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
long long int A[300001],maxim,valoare;
int m,n,op,a,b,poz;
void update(int i,int left,int right){
    if(left==right){
        A[i]=valoare;
    }
    else{
        int mij=(left+right)/2;
        if(poz<=mij){
            update(2*i,left,mij);
        }
        else{
            update(2*i+1,mij+1,right);
        }
        A[i]=max(A[2*i],A[2*i+1]);
    }
}
void maxi(int i,int left,int right,long long int &maxim){
    if(a<= left && b>=right){
        maxim=max(maxim,A[i]);
        return;
    }
    int mij=(left+right)/2;
    if(b<=mij){
        maxi(2*i,left,mij,maxim);
    }
    else{
        if(a>mij){
            maxi(2*i+1,mij+1,right,maxim);
        }
        else{
            maxi(2*i,left,mij,maxim);
            maxi(2*i+1,mij+1,right,maxim);
        }
    }
}
int main(){

        f>>n>>m;
        for(int i=1;i<=n;++i){
            f>>a;
            valoare=a;
            poz=i;
            update(1,1,n);
        }

        for(int i=1;i<=m;++i){
            f>>op>>a>>b;
            if(op==0){
                maxim=0;
                maxi(1,1,n,maxim);
                g<<maxim<<"\n";
            }
            else{
                poz=a;
                valoare=b;
                update(1,1,n);

            }
        }

    return 0;
}