Cod sursa(job #1039948)

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

int a,b,maxim;


void actualiz(int n, int s, int d, int val, int p,int *v[]){
    int m;
    if(s==d){
        v[n]=val;
    }
    else {
        m=(s+d)/2;
        if(p<=m)
            actualiz(2*n,s,m,val,p,v);
        else
            actualiz(2*n+1,m+1,d,val,p,v);
        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 *v[]){
    int m;
    if(a<=s && b>=d){
        if(v[n]>maxim)maxim=v[n];
    }
    else{
        m=(s+d)/2;
        if(a<=m)
            maxi(2*n,s,m,v);
        if(m+1<=b)
            maxi(2*n+1,m+1,d,v);
    }
}


int main()
{
    FILE* f,*g;
    int i,l,m,x,v[100000];
    f=fopen("arbin.txt","r");
    g=fopen("arbout.txt","w");
    fscanf(f,"%d%d",&l,&m);
    for(i=1;i<=l;i++){
        fscanf(f,"%d",&x);
        actualiz(1,1,l,x,i,v);
    }


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

    return 0;



}