Cod sursa(job #1976539)

Utilizator Constantin.Dragancea Constantin Constantin. Data 3 mai 2017 17:22:36
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
using namespace std;

int n,m,A[262144],bred,poz;

void update(int nod, int st, int dr, int a, int b){
	if (st==dr){
		A[nod]=a;
		return;
	}
	int mid=(st+dr)/2;
	if (b<=mid) update(2*nod,st,mid,a,b);
	else update(2*nod+1,mid+1,dr,a,b);
	A[nod]=max(A[2*nod],A[2*nod+1]);
}

int query(int nod, int st, int dr, int a, int b){
	if (a<=st && b>=dr) return A[nod];
	int mid=(st+dr)/2,max1=0,max2=0;
	if (a<=mid) max1=query(2*nod,st,mid,a,b);
	if (b>mid) max2=query(2*nod+1,mid+1,dr,a,b);
	return max(max1,max2);
}

int main(){
	ifstream cin ("arbint.in");
	ofstream cout ("arbint.out");
	cin>>n>>m;
	for (int i=1; i<=n; i++){
		cin>>bred;
		poz=i;
		update(1,1,n,bred,poz);
	}
	for (int i=1; i<=m; i++){
		int o,a,b;
		cin>>o>>a>>b;
		if (o==0) cout<<query(1,1,n,a,b)<<"\n";
		else{
			update(1,1,n,b,a);
		}
	}
	return 0;
}