Cod sursa(job #3341463)

Utilizator Alexia12345Maftei Alexia Alexia12345 Data 19 februarie 2026 17:11:27
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#define NMAX 400005
using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

int arbint[NMAX],n,q;

void update(int val, int poz, int nod, int st, int dr)
{
	if(st==dr)
	{
		if(val==poz)
			arbint[nod]=val;
	}
	else
	{
		if(poz<=(st+dr)/2 && val<=poz)
			update(val,poz,2*nod,st,(st+dr)/2);
		if(poz>=(st+dr)/2+1 && val>=poz)
			update(val,poz,2*nod+1,(st+dr)/2+1,dr);
	}
	arbint[nod]=max(arbint[nod*2],arbint[nod*2+1]);
}
int query(int si, int fi, int nod, int st, int dr)
{
	if(si<=st && dr<=fi)
		return arbint[nod];

	if(fi<(st+dr)/2)
		query(si,fi,2*nod,st,(st+dr)/2);
	if(si>(st+dr)/2)
		query(si,fi,2*nod+1,(st+dr)/2+1,dr);

	return max(query(si,fi,2*nod,st,(st+dr)/2),query(si,fi,2*nod+1,(st+dr)/2+1,dr));
}

int main()
{
	fin>>n>>q;
	for(int i=1; i<=n; ++i)
	{
		int x;
		fin>>x;
		update(x,i,1,1,n);
	}
	while(q--)
	{
		int cer,a,b;
		fin>>cer>>a>>b;
		if(cer==0)
			fout<<query(a,b,1,1,n)<<endl;
		else
			update(b,a,1,1,n);
	}
}