Cod sursa(job #1039967)

Utilizator gigel123Ionut. gigel123 Data 23 noiembrie 2013 19:57:23
Problema Arbori de intervale Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.21 kb
#include <stdio.h>
#include <stdlib.h>

int a,b,maxim,val,p,v[400000];


void actualiz(int n, int s, int d){
    int mij;
    if(s==d){
        v[n]=val;
    }
    else {
        mij=(s+d)/2;
        if(p<=mij)
            actualiz(2*n,s,mij);
        else
            actualiz(2*n+1,mij+1,d);
        if(v[2*n]>v[2*n+1])v[n]=v[2*n];
        else v[n]=v[2*n+1];
    }
}



void maxi(int n, int s, int d){
    int mij;
    if(a<=s && b>=d){
        if(v[n]>maxim)maxim=v[n];
    }
    else{
        mij=(s+d)/2;
        if(a<=mij)
            maxi(2*n,s,mij);
        if(mij+1<=b)
            maxi(2*n+1,mij+1,d);
    }
}


int main()
{
    FILE* f,*g;
    int i,l,m,x;
    f=fopen("arbint.in","r");
    g=fopen("arbint.out","w");
    fscanf(f,"%d%d",&l,&m);
    for(i=1;i<=l;i++){
        fscanf(f,"%d",&x);
        p=i;
        val=x;
        actualiz(1,1,l);
    }




    for(i=1;i<=m;i++){
        fscanf(f,"%d%d%d",&x,&a,&b);
        if(x==1){
            p=a;
            val=b;
            actualiz(1,1,l);
        }
        if(x==0){
            maxim=-1;
            maxi(1,1,l);
            fprintf(g, "%d\n",maxim);
        }
    }


    return 0;
}