Cod sursa(job #2143889)

Utilizator wilson182Alexandrina Panfil wilson182 Data 26 februarie 2018 12:59:22
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<bits/stdc++.h>
using namespace std;
int val, pos, v, s, d;
int a[400000];
void update(int nod, int st, int dr){
	if(st==dr){
		a[nod]=val;
		return;
	}
	int m=(st+dr)/2;
	if(pos<=m)update(nod*2, st, m); else update(nod*2+1, m+1, dr);
	a[nod]=max(a[nod*2], a[nod*2+1]);
}
void query(int nod, int st, int dr){
	if(st>=s && dr<=d){
		v=max(v, a[nod]);
		return;
	}
	int m=(st+dr)/2;
	if(s<=m)query(nod*2, st, m);
	if(d>m)query(nod*2+1, m+1, dr);
}
int main(){
	int n, m, x, y;
	ifstream f("arbint.in");
	ofstream g("arbint.out");
	f>>n>>m;
	for(int i=1;i<=n;i++){
		f>>x;
		val=x;
		pos=i;
		update(1,1,n);
	}
	while(m--){
		int k;
		f>>k>>x>>y;
		if(k){
			val=y;
			pos=x;
			update(1,1,n);
		}else{
			s=x;
			d=y;
			v=-1;
			query(1,1,n);
			g<<v<<'\n';
		}
	}
}