Pagini recente » Cod sursa (job #1995803) | Cod sursa (job #753295) | Cod sursa (job #1885778) | Cod sursa (job #288868) | Cod sursa (job #2686158)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
const int MAXN = 100003;
const int MAXS = sqrt(MAXN) + 3;
int n, m, a[MAXN], b[MAXS], s;
void build()
{
for(int i = 1; i <= n; i++)
{
int j = i/s;
b[j] = max(b[j], a[i]);
}
}
void update(int pos, int val)
{
a[pos] = val;
int j = pos/s;
b[j] = 0;
for(int i = j*s; i <= (j+1)*s -1; i++)
b[j] = max(b[j], a[i]);
}
int query(int l, int r)
{
int jl = l/s, jr = r/s;
int mx = 0;
if(jl == jr)
{
if(l == jl*s && r == (jr+1)*s-1)
return b[jl];
for(int i = l; i <= r; i++)
mx = max(mx, a[i]);
return mx;
}
if(l == jl*s)
mx = max(mx, b[jl]);
else
for(int i = l; i <= (jl+1)*s-1; i++)
mx = max(mx, a[i]);
for(int j = jl+1; j < jr; j++)
mx = max(mx, b[j]);
if(r == (jr+1)*s-1)
mx = max(mx, b[jr]);
else
for(int i = jr*s; i <= r; i++)
mx = max(mx, a[i]);
return mx;
}
int main()
{
fin >> n >> m;
s = sqrt(n);
for(int i = 1; i <= n; i++)
fin >> a[i];
build();
for(int i = 0; i < m; i++)
{
int tip, x, y;
fin >> tip >> x >> y;
if(tip == 1)
update(x, y);
else
fout << query(x, y) << "\n";
}
return 0;
}