Pagini recente » Cod sursa (job #2568936) | Cod sursa (job #2650799) | Cod sursa (job #3214537) | Cod sursa (job #436993) | Cod sursa (job #3031629)
#include <bits/stdc++.h>
#define NM 100005
#define AM 20
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int n, t, a, b, x;
bool q;
int arb[AM];
void update(int val, int k, int nod = 1, int st = 1, int dr = n)
{
if(st >= dr)
{
arb[nod] = val;
return;
}
int mij = (st + dr) / 2;
if(k <= mij)
update(val, k, nod * 2, st, mij);
else
update(val, k, nod * 2 + 1, mij + 1, dr);
arb[nod] = max(arb[nod * 2], arb[nod * 2 + 1]);
}
int getMax(int a, int b, int nod = 1, int st = 1, int dr = n)
{
if(a <= st && dr <= b)
return arb[nod];
int mij = (st + dr) / 2, x = -1;
if(a <= mij)
x = max(x, getMax(a, b, nod * 2, st, mij));
if(mij < b)
x = max(x, getMax(a, b, nod * 2 + 1, mij + 1, dr));
return x;
}
int main()
{
int i;
fin >> n >> t;
for(i = 1; i <= n; i++)
{
fin >> x;
update(x, i);
}
for(; t; t--)
{
fin >> q >> a >> b;
if(q)
update(b, a);
else
fout << getMax(a, b) << '\n';
}
return 0;
}