Mai intai trebuie sa te autentifici.

Cod sursa(job #1276919)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 26 noiembrie 2014 23:30:06
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<cstdio>
int n,m,i,j,l,r,op,p,x,a,b,v[300100],sol;
FILE *f,*g;
int maxim(int a,int b){
    if(a>b)
        return a;
    return b;
}
void upd(int nod,int l,int r,int p,int x){
    if(l==r){
        v[nod]=x;
        return;
    }
    int mid=(l+r)>>1;
    if(p<=mid)
        upd((nod<<1),l,mid,p,x);
    if(p>mid)
        upd((nod<<1)+1,mid+1,r,p,x);
    v[nod]=maxim(v[(nod<<1)],v[(nod<<1)+1]);
}
void query(int nod,int l,int r,int a,int b){
    if(a<=l&&r<=b){
        sol=maxim(sol,v[nod]);
        return;
    }
    int mid=(l+r)>>1;
    if(a<=mid)
        query((nod<<1),l,mid,a,b);
    if(b>mid)
        query((nod<<1)+1,mid+1,r,a,b);
}
int main(){
    f=fopen("arbint.in","r");
    g=fopen("arbint.out","w");
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;i++){
        fscanf(f,"%d",&x);
        upd(1,1,n,i,x);
    }
    for(i=1;i<=m;i++){
        fscanf(f,"%d",&op);
        if(op==1){
            fscanf(f,"%d%d",&p,&x);
            upd(1,1,n,p,x);
        }
        else{
            fscanf(f,"%d%d",&a,&b);
            sol=0;
            query(1,1,n,a,b);
            fprintf(g,"%d\n",sol);
        }
    }





    fclose(f);
    fclose(g);
    return 0;
}