Cod sursa(job #1037423)

Utilizator ephgstefana gal ephg Data 20 noiembrie 2013 10:41:13
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
using namespace std;

#define BM 1000005

int n,m;
int a[BM];
int st,dr,p,val,mx;

void up(int nod, int x,int y){
    if(x==y){
        a[nod]=val;
        return;
    }
    int mij=(x+y)/2;
    if(p<=mij)up(2*nod,x,mij);
    else up(2*nod+1,mij+1,y);
    a[nod]=max(a[2*nod],a[2*nod+1]);
}

void scoate(int nod, int x,int y){
    if(x>=st&&y<=dr){
        mx=max(mx, a[nod]);
        return;
    }
    int mij=(x+y)/2;
    if(st<=mij)scoate(2*nod,x,mij);
    if(dr>mij)scoate(2*nod+1,mij+1,y);
}

int main  (){
    int i,t,x,y;
    ifstream f("arbint.in");
    ofstream g("arbint.out");
    f>>n>>m;
    for(i=1;i<=n;++i){
        f>>val;
        p=i;
        up(1,1,n);
    }
    for(i=1;i<=m;++i){
        f>>t>>x>>y;
        if(t==0){
            st=x,dr=y;
            mx=0;
            scoate(1,1,n);
            g<<mx<<'\n';
        }
        else {
            p=x,val=y;
            up(1,1,n);
        }
    }
    return 0;
}