Pagini recente » Cod sursa (job #2896168) | Cod sursa (job #1044535) | Cod sursa (job #2634064) | Cod sursa (job #346962) | Cod sursa (job #3033241)
#include <fstream>
#include <iostream>
using namespace std;
#define MAX_N 100001
#define sqrt_N 317
int v[MAX_N];
int batog[sqrt_N];
ifstream in ("arbint.in");
ofstream out ("arbint.out");
void update(int poz, int val)
{
int pozB = poz / sqrt_N;
batog[pozB] = max(batog[pozB], val);
if(batog[pozB] == v[poz])
{
for(int i = (pozB - 1) * sqrt_N; i <= pozB * sqrt_N; ++i)
batog[pozB] = max(batog[pozB], v[i]);
}
v[poz] = val;
}
void querry(int st, int dr)
{
int firstBucket = (st + sqrt_N - 1) / sqrt_N * sqrt_N;
int lastBucket = dr / sqrt_N * sqrt_N;
int ans = 0;
while (st <= dr && st < firstBucket)
ans = max(v[st++], ans);
while (dr >= st && dr >= lastBucket)
ans = max(v[dr--], ans);
firstBucket /= sqrt_N;
lastBucket /= sqrt_N;
while(firstBucket < lastBucket)
{
ans = max(ans, batog[firstBucket++]);
}
out << ans << '\n';
}
int main()
{
int n, m, c, a, b;
in >> n >> m;
for(int i = 1; i <= n; ++i)
{
in >> v[i];
batog[i / sqrt_N] = max(batog[i / sqrt_N], v[i]);
}
for(int i = 0; i < m; ++i)
{
in >> c >> a >> b;
if(c == 0)
{
querry(a,b);
} else
{
update(a,b);
}
}
return 0;
}