Pagini recente » Cod sursa (job #1359443) | Cod sursa (job #190161) | Cod sursa (job #1184273) | Cod sursa (job #1679813) | Cod sursa (job #2552050)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m, i, j;
int val, poz;
int tip, x, y;
int St, Dr, Maxim;
int maxim[262144];
void update(int nod, int st, int dr)
{
if (st == dr)
{
maxim[nod] = val;
return;
}
int mij = (st + dr) / 2;
if (poz <= mij)
update(nod*2, st, mij);
else
update(nod*2+1, mij+1, dr);
maxim[nod] = max(maxim[2*nod], maxim[2*nod+1]);
}
void query(int nod, int st, int dr)
{
if (St <= st && dr <= Dr)
{
Maxim = max(Maxim, maxim[nod]);
return;
}
int mij = (st + dr) / 2;
if (St <= mij)
query(nod*2, st, mij);
if (mij < Dr)
query(nod*2+1, mij+1, dr);
}
int main()
{
f >> n >> m;
for (i=1; i<=n; i++)
{
f >> x;
val = x, poz = i;
update(1, 1, n);
}
for (i=1; i<=m; i++)
{
f >> tip >> x >> y;
if (tip == 0)
{
St = x, Dr = y, Maxim = 0;
query(1, 1, n);
g << Maxim << "\n";
}
else
{
poz = x, val = y;
update(1, 1, n);
}
}
return 0;
}