Pagini recente » Borderou de evaluare (job #3303509) | Cod sursa (job #3302995) | Cod sursa (job #3344191) | Cod sursa (job #3347409) | Cod sursa (job #3344461)
#include <bits/stdc++.h>
using namespace std;
const int MAX = 100005;
int aint[4*MAX], p;
void update(int pos, int val)
{
pos += (p-1);
aint[pos] = val;
while (pos > 1)
{
pos /= 2;
aint[pos] = max(aint[pos*2], aint[pos*2+1]);
}
}
int query(int k, int x, int y, int st, int dr)
{
if (x == st && y == dr)
return aint[k];
int mij = (st + dr) / 2;
if (y <= mij)
return query(2*k, x, y, st, mij);
if (x >= mij+1)
return query(2*k+1, x, y, mij+1, dr);
return max(query(2*k, x, mij, st, mij), query(2*k+1, mij+1, y, mij+1, dr));
}
int main()
{
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n, m;
cin >> n >> m;
for (p = 1; p < n; p *= 2);
for (int i = 1; i <= n; ++i)
cin >> aint[p+i-1];
for (int i = n-1; i >= 1; --i)
aint[i] = max(aint[2*i], aint[2*i+1]);
for (int i = 1; i <= m; ++i)
{
int c, x, y;
cin >> c >> x >> y;
if (c == 0)
cout << query(1, x, y, 1, p) << "\n";
else
update(x, y);
}
return 0;
}