Cod sursa(job #301933)

Utilizator vanila_CPPIonescu Victor Cristian vanila_CPP Data 8 aprilie 2009 15:40:19
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#define MAX_N 100100
#define FIN "arbint.in"
#define FOUT "arbint.out"
using namespace std;
int arb[4*MAX_N+1];
int v[MAX_N+1],maxim,n,m,a,b;




void get_max(int p,int u,int nr){
        if (a<=p && u<=b){
                maxim=max(maxim,arb[nr]);
        } else {
                int m=(p+u)/2;
                if (a<=m){get_max(p,m,2*nr);}
                if (b>m){get_max(m+1,u,2*nr+1);}
        }
}


void modify(int a,int p,int u,int nr){
        if (p==u){
                arb[nr]=b;} else {
                int m=(p+u)/2;
                if (a<=m){modify(a,p,m,2*nr);} else{
                                modify(a,m+1,u,2*nr+1);}
                arb[nr]=max(arb[2*nr],arb[2*nr+1]);
                }

}



void iofile(void){
        freopen(FIN,"rt",stdin);
        freopen(FOUT,"wt",stdout);
        scanf("%d%d",&n,&m);
        int x;
        for (int a=1;a<=n;a++){
                scanf("%d",&b);
                modify(a,1,n,1);
        }
        for (int i=1;i<=m;i++){
                scanf("%d%d%d",&x,&a,&b);
                if (x){
                        modify(a,1,n,1);} else {
                        maxim=0;
                        get_max(1,n,1);
                        printf("%d\n",maxim);
                     }
        }
        fclose(stdin);
        fclose(stdout);
}

int main(void){
        iofile();
        return 0;
}