Cod sursa(job #1039951)

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

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


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);
    }

    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);
        }
    }

return 0;
}