Cod sursa(job #3357462)

Utilizator Alexia_vAlexia Verebeli Alexia_v Data 10 iunie 2026 00:02:19
Problema Arbori de intervale Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.8 kb
#include<stdio.h>

#define MAX 100000

int maxim(int a,int b)
{
  if(a>b)
    return a;
  return b;
}

void construire(int A[],int arbore[],int nod,int stg,int dr)
{
  if(stg==dr)
    {
      arbore[nod]=A[stg];
      return ;
    }

  int mijloc=(stg+dr)/2;

  construire(A,arbore,2*nod,stg,mijloc);

  construire(A,arbore,2*nod+1,mijloc+1,dr);

  arbore[nod]=maxim(arbore[2*nod],arbore[2*nod+1]);
  
}

int interogare(int arbore[],int nod,int stg,int dr,int a, int b)
{
  if(a<=stg && dr<=b)
    return arbore[nod];

  if(dr<a || b<stg)
    return 0;

  int mijl=(stg+dr)/2;

  int rez_stg=interogare(arbore,2*nod,stg,mijl,a,b);

  int rez_dr=interogare(arbore,2*nod+1,mijl+1,dr,a,b);

  return maxim(rez_stg,rez_dr);
  
}

void actualizare(int arbore[],int nod,int stg,int dr,int poz,int val_noua)
{
  if(stg==dr)
    {
      arbore[nod]=val_noua;
      return;
    }
  int mijl=(stg+dr)/2;

  if(poz<=mijl)
    {
      actualizare(arbore,2*nod,stg,mijl,poz,val_noua);
    }
  else{
    actualizare(arbore,2*nod+1,mijl+1,dr,poz,val_noua);
  }

  arbore[nod]=maxim(arbore[2*nod],arbore[2*nod+1]);
  
}

int main()
{
  FILE *fin=fopen("arbint.in","r");
  FILE *fout=fopen("arbint.out","w");
  
  int n,m;
  int A[MAX+1];
  static int arbore[4*MAX];

  if(fscanf(fin,"%d %d",&n,&m)!=2)
    {
      printf("citire incorecta\n");
      return 1;
    }

  for(int i=1;i<=n;i++)
    {
      if(fscanf(fin,"%u",&A[i])!=1)
	{
	  printf("citire incorecta\n");
	  return 1;
	}
    }

  construire(A,arbore,1,1,n);

  for(int i=0;i<m;i++)
    {
      int tip,a,b;

      if(fscanf(fin,"%d %d %u",&tip,&a,&b)!=3)
      {
	printf("citire incorecta\n");
	return 1;
      }

      if(tip==0)
	{
	  fprintf(fout,"%u\n",interogare(arbore,1,1,n,a,b));
	  
	}
      else
	{
	  actualizare(arbore,1,1,n,a,b);
	}
    }
  
  fclose(fin);
  fclose(fout);
  return 0;
}