Pagini recente » Cod sursa (job #454031) | Cod sursa (job #153138) | Borderou de evaluare (job #1036353) | Cod sursa (job #2819524) | Cod sursa (job #2817196)
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, questions, val, pos, answer, start, finish, type, a, b;
int arbore[5 * NMAX];
void update(int node, int left, int right) {
if (left == right) {
//g << left << " " << right << " " << node << " " << val << "\n";
arbore[node] = val;
return ;
}
int mid = (left + right) / 2;
if (pos <= mid) {
update(2 * node, left, mid);
} else {
update(2 * node + 1, mid + 1, right);
}
arbore[node] = max(arbore[node * 2], arbore[node * 2 + 1]);
}
void query(int node, int left, int right) {
if (start <= left && right <= finish) {
//g << left << " " << right << " " << node << "\n";
answer = max(answer, arbore[node]);
return ;
}
int mid = (left + right) / 2;
if (start <= mid)
query(node * 2, left, mid);
if (mid < finish)
query(node * 2 + 1, mid + 1, right);
}
int main()
{
f >> n >> questions;
for (int i = 1; i <= n; i++) {
f >> val;
pos = i;
update(1, 1, n);
}
while (questions--) {
f >> type >> a >> b;
if (type == 0) {
answer = -1;
start = a;
finish = b;
query(1, 1, n);
g << answer << "\n";
} else {
pos = a;
val = b;
update(1, 1, n);
}
}
return 0;
}