Cod sursa(job #2973805)

Utilizator dumitrache12Dumitrache Iulian dumitrache12 Data 2 februarie 2023 00:12:02
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include<bits/stdc++.h>
using namespace std;

ifstream in ("arbint.in");
ofstream out("arbint.out");
// auto& in = cin;
// auto& out = cout;

int const N = 200099;
int const MIN = -1;
int n, m, v[N];

void read_and_build()
{
	in>>n>>m;
	int e = 2*n;
	for(int i=n; i<e; i++)
		in>>v[i];
	for(int i=n-1; i; i--)
		v[i] = max(v[2*i], v[2*i+1]);
}

void update(int idx, int val)
{
	int p = idx + n;
	v[p] = val;
	for(int u=p/2; u; u/=2)
		v[u] = max(v[2*u], v[2*u+1]);
}

int get(int from, int to)
{
	int rez = MIN;
	for(from += n, to += n; from < to; from/=2, to/=2)
	{
		if(from & 1 == 1)	rez = max(rez, v[from++]);
		if(to & 1 == 1)		rez = max(rez, v[--to]);
	}
	return rez;
}

int main(){
	read_and_build();
	for(int i=0; i<m; i++)
	{
		int o, a, b;
		in>>o>>a>>b;
		if(o == 0)	out<<get(a-1, b)<<endl;
		else		update(a-1, b);
	}
	return 0;
}