Cod sursa(job #2643053)

Utilizator BogdanTicuTicu Bogdan Valeriu BogdanTicu Data 18 august 2020 15:50:20
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

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

int arb[500001],maxx;


void Update(int nod,int st,int dr,int pos,int val)
{
	if(st==dr)
	{
		arb[nod]=val;
		return;
	}
	int mid=(st+dr)/2;
	if(pos<=mid) Update(nod*2,st,mid,pos,val);
	else Update(nod*2+1,mid+1,dr,pos,val);
	arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}


void query(int nod,int st,int dr,int qa,int qb)
{
	int middle=(st+dr)/2;
	if(qa<=st && dr<=qb)
	{
		maxx=max(maxx,arb[nod]);
		return;
	}
	if(qa<=middle)
		query(nod*2,st,middle,qa,qb);
	if(qb>middle)
		query(nod*2+1,middle+1,dr,qa,qb);
}

int main()
{
	int n,m;
	in>>n>>m;
	for(int i=1;i<=n;i++)
	{
		int x;
		in>>x;
		Update(1,1,n,i,x);
	}
	for(int i=1;i<=m;i++)
	{
		int a,b,x;
		in>>x>>a>>b;
		if(x==1)
		{
			Update(1,1,n,a,b);
		}
		else
		{	
			maxx=-1;
			query(1,1,n,a,b);
			out<<maxx<<"\n";
		}
	}
	return 0;
}