Cod sursa(job #3134787)

Utilizator stefoni.mirceaStefoni Mircea stefoni.mircea Data 30 mai 2023 22:34:52
Problema Arbori de intervale Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <stdio.h>
#define mx 400010

long n,a,b,c,i,m,s;
long array[mx];

long max(long a, long b)
{
	long max;

	max=a;

	if (max<b)
    {
		max=b;
    }

	return max;
}

void comp(long nod)
{
	if (array[nod]>s)
    {
		s=array[nod];
    }
}

void add(long nod, long p, long u, long poz, long val)
{
	long m;
	if (p==u)
    {
		array[nod]=val;
    }

	else
	{
		m=(p+u)/2;
		if (poz<=m)
        {
			add(2*nod,p,m,poz,val);
        }
		if (m<poz)
        {
			add(2*nod+1,m+1,u,poz,val);
        }

		array[nod]=max(array[2*nod],array[2*nod+1]);
	}
}

void query(long nod, long p, long u)
{
	long m;
	if (a<=p && u<=b)
	{
		comp(nod);
		return;
	}
	if (p<u)
	{
		m=(p+u)/2;
		if (a<=m)
        {
			query(2*nod,p,m);
        }

		if (m<b)
        {
			query(2*nod+1,m+1,u);
        }
	}
}

int main(void)
{

    FILE *f,*g;


	f=fopen("arbint.in","r");
	g=fopen("arbint.out","w");


	fscanf(f,"%ld %ld",&n,&m);
	for (i=1; i<=n; i++)
	{
		fscanf(f,"%ld",&a);
		add(1,1,n,i,a);
	}
	for (i=1; i<=m; i++)
	{
		fscanf(f,"%ld %ld %ld",&c,&a,&b);
		if (c == 1)
			add(1,1,n,a,b);
		else 
		{
			s=0;
			query(1,1,n);
			fprintf(g,"%ld\n",s);
		}
	}



	fclose(stdin);
	fclose(stdout);

	return 0;
}