Pagini recente » Cod sursa (job #1547363) | Cod sursa (job #3128221) | Cod sursa (job #693303) | Cod sursa (job #2868297) | Cod sursa (job #2850459)
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int t[400010];
int ql, qr, nmax;
int up, uv;
void update(int pos, int l, int r)
{
if (l == r)
{
t[pos] = uv;
return;
}
int mid = (l + r) / 2;
if (up <= mid)
{
update(pos * 2, l, mid);
}
else
{
update(pos * 2 + 1, mid + 1, r);
}
t[pos] = max(t[pos * 2], t[pos * 2 + 1]);
return;
}
void query(int pos, int l, int r)
{
if (l >= ql && r <= qr)
{
nmax = max(nmax, t[pos]);
return;
}
int mid = (l + r) / 2;
if (ql <= mid) query(pos * 2, l, mid);
if (qr > mid) query(pos * 2 + 1, mid + 1, r);
}
int main()
{
int N, M, X;
fin >> N >> M;
for (int i = 1; i <= N; i++)
{
up = i;
fin >> uv;
update(1, 1, N);
}
int a, b;
bool o;
for (int i = 1; i <= M; i++)
{
fin >> o >> a >> b;
if (!o)
{
ql = a;
qr = b;
nmax = -1;
query(1, 1, N);
fout << nmax << "\n";
}
else
{
up = a;
uv = b;
update(1, 1, N);
}
}
return 0;
}