Pagini recente » Cod sursa (job #2074710) | Cod sursa (job #2718513) | Cod sursa (job #2182234) | Cod sursa (job #170707) | Cod sursa (job #3132103)
#include<fstream>
const int n = 100020;
std::ifstream in("arbint.in");
std::ofstream out("arbint.out");
int nr, a[n * 4], pos, k, r, l;
void upp(int node, int st, int dr)
{
if (dr == st)
{
a[node] = nr;
return;
}
int m = (st + dr) / 2;
if (m < pos)
upp(node * 2 + 1, m + 1, dr);
else
upp(node * 2, st, m);
a[node] = std::max(a[node * 2 + 1], a[node * 2]);
}
void query(int nod, int st, int dr)
{
int m = (st + dr) / 2;
if (dr <= l && st >= r)
{
k = std::max(k, a[nod]);
return;
}
if (m >= r)
query(nod * 2, st, m);
if (m < l)
query(nod * 2 + 1, m + 1, dr);
}
int main() {
int n, m;
in >> n >> m;
for (int i = 1; i <= n; i++) {
in >> nr;
pos = i;
upp(1, 1, n);
}
int x, y;
while (m--)
{
in >> k >> x >> y;
if (k == 0)
{
r = x;
l = y;
query(1, 1, n);
out << k << '\n';
}
else
{
pos = x;
nr = y;
upp(1, 1, n);
}
}
}