Cod sursa(job #3341470)

Utilizator Alexia12345Maftei Alexia Alexia12345 Data 19 februarie 2026 17:29:51
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <iostream>
#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(st==poz)
			arbint[nod]=val;
			return ;
	}
	else
	{
		if(poz<=(st+dr)/2 && st<=poz)
			update(val,poz,2*nod,st,(st+dr)/2);
		if(poz>=(st+dr)/2+1 && dr>=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)
		return query(si,fi,2*nod,st,(st+dr)/2);
	if(si>(st+dr)/2)
		return 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;
		//cerr<<a<<" "<<b<<endl;
		if(cer==0)
			fout<<query(a,b,1,1,n)<<endl;

		else
			update(b,a,1,1,n);

	}
}