Pagini recente » Cod sursa (job #325794) | Cod sursa (job #3248579) | Cod sursa (job #2964594) | Cod sursa (job #672013) | Cod sursa (job #2628212)
//#include "pch.h"
#include <iostream>
#include <algorithm>
#include <fstream>
#include <vector>
#include <climits>
#include <queue>
#define ll long long int
#define nr 100005
using namespace std;
ifstream f("arbint.in");
ofstream o("arbint.out");
int abi[nr * 4];
int pos, val;
int start, finish;
int n, m;
int ans;
int cer;
void update(int nod, int stanga, int dreapta)
{
if (stanga == dreapta)
{
abi[nod] = val;
return;
}
int mid = (stanga + dreapta) / 2;
if (pos <= mid)
{
update(2 * nod, stanga, mid);
}
else
{
update(2 * nod + 1, mid + 1, dreapta);
}
abi[nod] = max(abi[2 * nod], abi[2 * nod + 1]);
}
void querry(int nod, int stanga, int dreapta)
{
if (start <= stanga && dreapta <= finish)
{
if (ans < abi[nod])
{
ans = abi[nod];
}
return;
}
int mid = (stanga + dreapta) / 2;
if (start <= mid)
{
querry(nod * 2, stanga, mid);
}
if (mid < finish)
{
querry(nod * 2 + 1, mid + 1, dreapta);
}
}
int main()
{
f >> n >> m;
for (size_t i = 1; i <= n; i++)
{
int a;
f >> a;
pos = i;
val = a;
update(1, 1, n);
}
for (size_t i = 1; i <= m; i++)
{
int val1, val2;
f >> cer >> val1 >> val2;
if (cer == 0)
{
ans = -1;
start = val1;
finish = val2;
querry(1, 1, n);
o << ans << "\n";
}
else
{
pos = val1;
val = val2;
update(1, 1, n);
}
}
}