Pagini recente » Cod sursa (job #998075) | Cod sursa (job #21749) | Cod sursa (job #2798757) | Cod sursa (job #2593184) | Cod sursa (job #1059068)
#include<fstream>
using namespace std;
int v[400070];
long param1, param2, val_max;
void modifica(long nod, long st, long dr)
{
if (st == dr)
v[nod] = param2;
else
{
long 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(long nod, long st, long dr)
{
if (param1 <= st && dr <= param2)
{
if (val_max < v[nod])
val_max = v[nod];
}
else
{
long 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()
{
long n, m;
bool alegere;
ifstream f("arbint.in");
f >> n >> m;
for (param1 = 1; param1 <= n; param1++)
{
f >> param2;
modifica(1, 1, n);
}
ofstream g("arbint.out");
for (long 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;
}