Cod sursa(job #305543)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 17 aprilie 2009 19:22:35
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<algorithm>
using namespace std;

#define DIM 100001
#define INF -1001

int n,m,x,y,poz,val,max0,a[4*DIM];

inline int max(int a,int b){

    if(a>b)
        return a;
    return b;}

void query(int nod,int st,int dr){
    int mij;

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

void update(int nod,int st,int dr){
    int mij;

    if(st==dr){
        a[nod]=val;
        return;}
    mij=(st+dr)/2;
    if(poz<=mij)
        update(2*nod,st,mij);
    else
        update(2*nod+1,mij+1,dr);
    a[nod]=max(a[2*nod],a[2*nod+1]);}

void solve(){
    int i,tip;

    scanf("%d%d",&n,&m);
    for(i=1; i<=n; ++i){
        scanf("%d",&val);
        poz=i;
        update(1,1,n);}
    for(i=1; i<=m; ++i){
        scanf("%d%d%d",&tip,&x,&y);
        if(!tip){
            max0=INF;
            query(1,1,n);
            printf("%d\n",max0);}
        else{
            poz=x;
            val=y;
            update(1,1,n);}}}

int main(){

    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);

    solve();
    return 0;}