Pagini recente » Cod sursa (job #1675830) | Cod sursa (job #2676420) | Cod sursa (job #2435188) | Cod sursa (job #2953641) | Cod sursa (job #1059070)
#include<fstream>
using namespace std;
unsigned *v, param1, param2, val_max;
void modifica(unsigned nod, unsigned st, unsigned dr)
{
if (st == dr)
v[nod] = param2;
else
{
unsigned m = ((st + dr) >> 1), dublu = (nod << 1);
if (param1 <= m)
modifica(dublu, st, m);
else
modifica(dublu + 1, m + 1, dr);
v[nod] = v[dublu] < v[dublu + 1] ? v[dublu + 1] : v[dublu];
}
}
void maxim(unsigned nod, unsigned st, unsigned dr)
{
if (param1 <= st && dr <= param2)
{
if (val_max < v[nod])
val_max = v[nod];
}
else
{
unsigned m = ((st + dr) >> 1), dublu = (nod << 1);
if (param1 <= m)
maxim(dublu, st, m);
if (m < param2)
maxim(dublu + 1, m + 1, dr);
}
}
int main()
{
unsigned n, m;
bool alegere;
ifstream f("arbint.in");
f >> n >> m;
v = new unsigned[44*n + 66];
for (param1 = 1; param1 <= n; param1++)
{
f >> param2;
modifica(1, 1, n);
}
ofstream g("arbint.out");
for (unsigned i = 1; i <= m; i++)
{
f >> alegere >> param1 >> param2;
if (alegere)
modifica(1, 1, n);
else
{
val_max = 0;
maxim(1, 1, n);
g << val_max << '\n';
}
}
f.close();
g.close();
return 0;
}