Cod sursa(job #1039950)

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

int a,b,maxim,v[100000];


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


int main()
{
    FILE* f,*g;
    int i,l,m,x;
    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);
    }
    printf("\n%d",v[8]);
    printf("\n%d",v[9]);
    printf("\n%d",v[5]);
    printf("\n%d",v[6]);
    printf("\n%d",v[7]);

    for(i=1;i<=2*l;i++){
        //printf("\n%d %d",v[i],i);
    }

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

    printf("\n%d",v[8]);
    printf("\n%d",v[9]);
    printf("\n%d",v[5]);
    printf("\n%d",v[6]);
    printf("\n%d",v[7]);



}