Cod sursa(job #1995241)

Utilizator virtualityBbbbbbbbbbbbbbbbbb virtuality Data 27 iunie 2017 13:16:02
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<bits/stdc++.h>
using namespace std;
const int N=100020;
int val, a[N*4], pos, k, r, l;
void update(int nod, int st, int dr){
	if(st==dr){
		a[nod]=val;
		return;
	}
	int m=(st+dr)/2;
	if(m>=pos) 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>=r && dr<=l){
		k=max(k, a[nod]);
		return;
	}
	int m=(st+dr)/2;
	if(m>=r) query(nod*2,st, m);
	if(m<l) query(nod*2+1, m+1, dr);
}
int main(){
	int n, m;
	ifstream f("arbint.in");
	ofstream g("arbint.out");
	f>>n>>m;
	for(int i=1;i<=n;i++){
		f>>val;
		pos=i;
		update(1, 1, n);
	}
	int x, y;
	while(m--){
		f>>k>>x>>y;
		if(k==0)r=x, l=y,query(1, 1, n), g<<k<<'\n'; else pos=x, val=y, update(1, 1, n);
	}
}