Pagini recente » Cod sursa (job #1437970) | Cod sursa (job #1169415) | Cod sursa (job #331642) | Cod sursa (job #1918774) | Cod sursa (job #1142748)
#include <iostream>
#include <fstream>
using namespace std;
#define MAXN 100005
#define MAXA 1000
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, size;
int a[MAXN], asqrt[MAXA];
void update(int poz, int val)
{
a[poz] = val;
for (int i = 1; i * size <= n; i++) {
if ((i - 1) * size + 1 <= poz && poz <= i * size) {
asqrt[i] = 0;
for (int j = (i - 1) * size + 1; j <= i * size; j++) {
asqrt[i] = max(asqrt[i], a[j]);
}
}
}
}
int query(int x, int y)
{
int st = (1 << 30), dr = -1, mx = 0;
for (int i = 1; i * size <= n; i++) {
if (x < (i - 1) * size + 1 && i * size < y) {
if (st < (i - 1) * size) st = (i - 1) * size;
dr = i * size + 1;
mx = max(mx, asqrt[i]);
}
}
if (st == (1 << 30) || dr == -1) st = dr = y;
for (int i = x; i <= st; i++) {
mx = max(mx, a[i]);
}
for (int i = dr; i <= y; i++) {
mx = max(mx, a[i]);
}
return mx;
}
int main()
{
int m;
f >> n >> m;
for (int i = 1; i <= n; i++) {
f >> a[i];
}
while (size * size <= n) size++;
size--;
for (int i = 1; i * size <= n; i++) {
asqrt[i] = 0;
for (int j = (i - 1) * size + 1; j <= i * size; j++) {
asqrt[i] = max(asqrt[i], a[j]);
}
}
for (int i = 1; i <= m; i++) {
int op, x, y;
f >> op >> x >> y;
switch (op) {
case 0: cout << query(x, y) << '\n'; break;
case 1: update(x, y); break;
}
}
}