Cod sursa(job #966669)

Utilizator dropsdrop source drops Data 26 iunie 2013 13:44:45
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <queue>
#include <deque>
#include <list>
#include <ctime>
#include <string>
#include <algorithm>
using namespace std;
ifstream ff("arbint.in");
ofstream gg("arbint.out");

int n, m, aa[(1<<18)+1], s;

void upd(int n, int l, int r, int p,int x){
	if(l==r){ aa[n]=x; } else {
		int m=(l+r)/2;
		if(p<=m)upd(2*n, l, m, p, x); else
			upd(2*n+1, m+1, r, p, x); 
		aa[n]=max(aa[2*n], aa[2*n+1]); }
}

void qry(int n,int l,int r, int a, int b){
	if(a<=l&&r<=b){ s=max(s,aa[n]); } else {
		int m=(l+r)/2;
		if(a<=m)qry(2*n, l, m, a, b);
		if(b>m)qry(2*n+1, m+1, r, a, b); }
}

int main(){
	int x,y,op;
	ff >> n >> m;
	for(int i=1;i<=n;i++){
		ff >> x;
		upd(1,1,n,i,x);
	}
	for(int i=1;i<=m;i++){
		ff >> op >> x >> y;
		if(op){ upd(1,1,n,x,y); } else {
			s=0;
			qry(1,1,n,x,y);
			gg << s << "\n"; }
	}
}