Cod sursa(job #1152137)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 24 martie 2014 16:03:24
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.68 kb
#include<cstdio>
#include<cstring>
int n,m,op,a,b,v[400100],l,nr;
char s[2000000];
FILE *f,*g;
/*int maxim(int a,int b){
        if(a>b)
            return a;
        return b;
}*/
void ad(int nod,int st,int dr){
    if(st==dr&&st==a){
        v[nod]=b;
        return;
    }
    int mid=((st+dr)>>1);
    if(a<=mid)
        ad((nod<<1),st,mid);
    if(a>mid)
        ad((nod<<1)+1,mid+1,dr);
    if(v[(nod<<1)]>v[(nod<<1)+1])
        v[nod]=v[(nod<<1)];
    else
        v[nod]=v[(nod<<1)+1];
    //v[nod]=maxim(v[(nod<<1)],v[(nod<<1)+1]);
}
int query(int nod,int st,int dr){
    int qs=0,qd=0,mid,nn;
    if(a<=st&&dr<=b)
        return v[nod];
    mid=((st+dr)>>1);
    if(a<=mid)
        qs=query((nod<<1),st,mid);
    if(mid<b)
        qd=query((nod<<1)+1,mid+1,dr);
    if(qs>qd)
        return qs;
    else
        return qd;
 //   return maxim(qs,qd);
}
int main(){
    f=fopen("arbint.in","r");
    g=fopen("arbint.out","w");
    fscanf(f,"%d%d\n",&n,&m);
   /* for(i=1;i<=2*n;i++){
        v[i]=-2000000000;
    }*/
    register int i;
   /*fgets(s,5000000,f);
    l=strlen(s);
    nr=0;
    for(i=0;i<l;i++){
        if(s[i]>='0'&&s[i]<='9')
            b=b*10+s[i]-'0';
        else{
            nr++;
            a=nr;
            ad(1,1,n);
            b=0;
        }
    }*/
   for(i=1;i<=n;i++){
        fscanf(f,"%d",&a);
        b=a;
        a=i;
        ad(1,1,n);
    }
    for(i=1;i<=m;i++){
        fscanf(f,"%d%d%d",&op,&a,&b);
        if(op==1){
            ad(1,1,n);
        }
        else{
            fprintf(g,"%d\n",query(1,1,n));
        }
    }










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