Cod sursa(job #1653977)

Utilizator Diana22Diana Lucaci Diana22 Data 16 martie 2016 18:57:23
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include<iostream>
#include<fstream>
using namespace std;
#define max 100000
ifstream f("arbint.in");
ofstream g("arbint.out");
//0 max
//1 update
int N, M, tree[4*max+5];

void update_pos(int node, int st, int dr, int pos, int x) {
	if (st == dr) {
		tree[node] = x;
		return;
	}
	int mij = (st + dr) / 2;
	if (pos <= mij)
		update_pos(node * 2, st, mij, pos, x);
	else
		update_pos(node * 2 + 1, mij + 1, dr, pos, x);
	if (tree[node * 2] > tree[node * 2 + 1])
		tree[node] = tree[node * 2];
	else
		tree[node] = tree[node * 2 + 1];
}
int query(int node, int st, int dr,int a, int b) {
	
	if (a <= st&&dr <= b)
		return tree[node];
	int mij = (st + dr) / 2,rs=-1,rd=-1;
	if (a <= mij)
	{
		rs=query(node * 2, st, mij, a, b);
	}
	if (mij<b)
	{
		rd = query(node * 2 + 1, mij + 1, dr, a, b);
	}
	if (rs > rd)
		return rs;
	return rd;
}
void citire() {
	int op, val, a, b;
	f >> N >> M;
	for (int i = 1; i <= N; i++) {
		f >> val;
		update_pos(1,1,N, i, val);
	}
	for (int i = 0; i < M; i++) {
		f >> op;
		if (op) {
			f >> a>>b;
			update_pos(1,1,N,a,b);
		}
		else
		{
			f >> a >> b;
			g << query(1, 1, N, a, b)<<endl;
		}
	}
}



int main() {
	citire();
	//system("pause");
	return 0;
}