Cod sursa(job #934195)

Utilizator thebest001Neagu Rares Florian thebest001 Data 30 martie 2013 14:55:59
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>

int n,m;
int v[100001];

int poz,val;

int inline max(int x,int y){
    return x>y?x:y;
}

void update(int p,int st,int dr){
    if (st==dr){
        v[p]=val;
        return;
    }
    int m=(st+dr)/2;
    if (poz<=m)
        update(2*p,st,m); else
    if (poz>m)
        update(2*p+1,m+1,dr);
    v[p]=max(v[2*p],v[2*p+1]);
}


int a,b;
int query(int p,int st,int dr){
    if (a<=st && dr<=b)
        return v[p];
    int m=(st+dr)/2,m1=-1,m2=-1;
    if (a<=m)
        m1=query(2*p,st,m);
    if (b>m)
        m2=query(2*p+1,m+1,dr);
    return m1>m2?m1:m2;
}

int main()
{

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

    scanf("%d %d",&n,&m);

    for (int i=1; i<=n; i++){
        int x;
        scanf("%d",&x);poz=i;val=x;
        update(1,1,n);
    }

    for (int i=1; i<=m; i++){
        int x,temp1,temp2;
        scanf("%d %d %d",&x,&temp1,&temp2);
        if (x==0){
            a=temp1;
            b=temp2;
            printf("%d\n",query(1,1,n));
        }
        if (x==1) {poz=temp1;val=temp2;update(1,1,n);};

    }



    return 0;
}