Pagini recente » Cod sursa (job #1133709) | Cod sursa (job #2483772) | Cod sursa (job #1186502) | Cod sursa (job #916431) | Cod sursa (job #2224646)
#include <iostream>
#include <fstream>
using namespace std;
const int maxn = 1e5+5, maxarb = 4e5+100, inf = 0x3f3f3f3f;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m, i, x, qa, qb, wt, maxim;
int arb[maxarb];
int update(int nod, int st, int dr)
{
if(st == dr)
return arb[nod] = qb;
int mij = (st + dr) / 2;
if(qa <= mij)
return arb[nod] = max(arb[2 * nod + 1], update(2 * nod, st, mij));
else
return arb[nod] = max(arb[2 * nod], update(2 * nod + 1, mij + 1, dr));
}
void query(int nod, int st, int dr)
{
if(st >= qa && dr <= qb)
{
maxim = max(maxim, arb[nod]);
return;
}
int mij = (st + dr) / 2;
if(qa <= mij) query(2*nod, st, mij);
if(qb >= mij + 1) query(2*nod+1, mij+1, dr);
}
int main()
{
f >> n >> m;
for(i = 1; i <= n; i ++)
{
f >> qb;
qa = i;
update(1, 1, n);
}
for(i = 1; i <= m ; i ++)
{
f >> wt >> qa >> qb;
if(wt == 1)
{
update(1, 1, n);
}
else
{
maxim = -inf;
query(1, 1, n);
g << maxim << '\n';
}
}
return 0;
}