Cod sursa(job #1931149)

Utilizator ButmalaiDanButmalai Dan ButmalaiDan Data 19 martie 2017 12:40:03
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<bits/stdc++.h>
using namespace std;
int n,m,heap[300300],t,x,y,val;
void update (int nod, int st, int dr,int i)
{
	//cout << "beda1 " << st<< " " << dr << " " << nod << " "<<"\n";
	if(st == dr)
	{
		heap[nod] = val;
		return;
	}
	int mid = (st + dr)/2;
	if(i <= mid) update(nod*2,st,mid, i); 
	else update(nod*2 + 1, mid + 1, dr, i);
	heap[nod] = max(heap[2*nod], heap[2*nod+1]);
}
int query(int nod, int st, int dr)
{
//	cout << "beda2 " << st<< " " << dr << " " << nod << " "<<"\n";
	if (x <= st && dr <= y)
	{
		return heap[nod];
	}
	int a = 0,b = 0, mid = (st + dr)/2;
	if (x <= mid) a = query(nod*2, st,mid);
	if(y > mid) b = query(nod*2 + 1, mid + 1, dr);
	return max(a,b);
}
int main()
{
	ifstream cin("arbint.in");
	ofstream cout("arbint.out");
	cin >> n >> m; 
	for (int i = 1; i <= n; i++){
		cin >> val;
		update(1,1,n,i);
	}
	while(m--){
		cin >> t >> x >> y;
		if(t == 0){
		 cout << query(1,1,n) << "\n";
		}else{ val = y; update(1,1,n,x);}
	}
}