Pagini recente » Cod sursa (job #442562) | Cod sursa (job #2467442) | Cod sursa (job #2158608) | Cod sursa (job #1582359) | Cod sursa (job #2976486)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int dim = 1e5+1;
int N, M;
int ma[4*dim+66];
int start, finish, val, pos, maxim;
void update(int nod, int left, int right)
{
if(left == right)
{
ma[nod] = val;
return;
}
int div = (left + right) / 2;
if(pos <= div) update(2*nod, left, div);
else update(2*nod+1, div+1, right);
ma[nod] = max(ma[2*nod], ma[2*nod + 1]);
}
void query(int nod, int left, int right)
{
if(start <= left and right <= finish)
{
if(maxim < ma[nod]) maxim = ma[nod];
return;
}
int div = (left + right) / 2;
if(start <= div) query(2*nod, left, div);
if(div < finish) query(2*nod + 1, div+1, right);
}
int main()
{
int X, A, B;
fin >> N >> M;
for(int i=1;i<=N;i++)
{
fin >> X;
pos = i, val = X;
update(1,1,N);
}
for(int i=1;i<=M;i++)
{
fin >> X >> A >> B;
if(X == 0)
{
maxim = -1;
start = A, finish = B;
query(1,1,N);
fout << maxim << '\n';
}
else {
pos = A, val = B;
update(1,1,N);
}
}
}