Cod sursa(job #2564145)

Utilizator MAF10000nu va dau numele MAF10000 Data 1 martie 2020 18:33:36
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.95 kb
#include <iostream>
#include <cstdio>

using namespace std;
long long v[1000050],arbore[2000050],k,n,maxim,m,maximul,c,d,x,k2;


void care_imaximul(int l,int st,int dr,int a ,int b){
    if(l<=k){
  //  if(a==st && b==dr){
 //           maximul=arbore[l];
//}
if(a<=st && dr<=b){
        if(arbore[l]>maximul){
            maximul=arbore[l];
        }
    }
    else{int mij=st+dr/2;
    if(a<=mij){
        care_imaximul(2*l,st,mij,a,b);
    }
    if(b>mij){
        care_imaximul(2*l+1,mij+1,dr,a,b);
    }
    }


}}

void facem_arborele(int l,int a,int b){
    k++;
    if(a==b){
        arbore[l]=v[a];
    }
if(a!=b){
        facem_arborele(2*l,a,(a+b)/2);
        facem_arborele(2*l+1,(a+b)/2+1,b);
        if(arbore[2*l]>arbore[2*l+1]){
            arbore[l]=arbore[2*l];
        }
        else{
            arbore[l]=arbore[2*l+1];
        }
}
}
void actualizare(int l,int st,int dr, int a){

    if(st!=dr){

        if(a<=(st+dr)/2){
            actualizare(2*l,st,(st+dr)/2,a);
        }
        else{actualizare(2*l+1,(st+dr)/2+1,dr,a);}}

    if(st==dr){
            arbore[l]=v[a];}

        else{
            if(arbore[2*l]>arbore[2*l+1]){
                arbore[l]=arbore[2*l];
            }
            else{
                arbore[l]=arbore[2*l+1];
            }
        }


}

int main()
{
    FILE*in =fopen("arbint.in","r");
    FILE*out=fopen("arbint.out","w");

    fscanf(in,"%d%d",&n,&m);

    for(int j=1;j<=n;j++){
        fscanf(in,"%d",&v[j]);
    }
    facem_arborele(1,1,n);

    maximul=0;
    while(m!=0){
        fscanf(in,"%d",&x);
        m--;

        if(x==0){
        maximul=0;
        fscanf(in,"%d%d",&c,&d);
        care_imaximul(1,1,n,c,d);
        fprintf(out,"%d\n",maximul);
        }
        if(x==1){
            fscanf(in,"%d%d",&c,&d);
            v[c]=d;
            actualizare(1,1,n,c);

        }
    }
    fclose(in);
    fclose(out);
}