Cod sursa(job #237287)

Utilizator katakunaCazacu Alexandru katakuna Data 29 decembrie 2008 14:10:54
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

int sol,A[400044],mij,n,m,i,t,a,b;


void update(int nod,int p,int u){
int mij;

 if(p == u){
 A[nod] = b;
 return ;
 }

 mij=(p+u)>>1;

   if(a<=mij)
   update(nod<<1,p,mij);
   else
   update((nod<<1)+1,mij+1,u);

   
   A[nod] = max(A[nod<<1],A[(nod<<1)+1]);
}


void query(int nod,int p,int u){
int mij;

  if(a<=p && u<=b){
  sol = max(sol, A[nod]);
  return;
  }

mij=(p+u)>>1;

  if(a<= mij) query(nod<<1,p,mij);
  if(b > mij) query((nod<<1)+1,mij+1,u);

}


int main(){

FILE *f=fopen("arbint.in","r");
FILE *g=fopen("arbint.out","w");
fscanf(f,"%d %d",&n,&m);

   for(i=1;i<=n;i++){
   fscanf(f,"%d",&b);
   a=i;
   update(1,0,n);
   }

   for(i=1;i<=m;i++){
   fscanf(f,"%d %d %d",&t,&a,&b);

     if(!t){
     sol=0;
     query(1,0,n);
     fprintf(g,"%d\n",sol);
     }

     else{
     update(1,0,n);
     }

   }

fclose(f);
fclose(g);

return 0;
}