Pagini recente » Cod sursa (job #2441839) | Cod sursa (job #1146379) | Cod sursa (job #2767804) | Cod sursa (job #2956509) | Cod sursa (job #2186684)
#include <iostream>
#include <fstream>
#define MMAX 300000
using namespace std;
ifstream f("arbint.in");
ofstream o("arbint.out");
int arb[MMAX], n, m, a, b, maxim;
void update(int nod, int st, int dr)
{
if(st == dr)
{
arb[nod] = b;
return;
}
int mij = st + ((dr - st) >> 1);
if(a <= mij)
update(nod<<1,st,mij);
else
update((nod<<1)+1,mij+1,dr);
arb[nod] = max(arb[nod<<1],arb[(nod<<1)+1]);
}
void query(int nod, int st, int dr)
{
if(st >= a && dr <= b)
{
maxim = max(maxim,arb[nod]);
return;
}
int mij = st + (dr - st)/2;
if(mij >= a)
query(nod<<1,st,mij);
if(mij+1 <= b)
query((nod<<1)+1,mij+1,dr);
}
int main()
{
f >> n >> m;
for(a = 1; a <= n; ++a)
{
f >> b;
update(1,1,n);
}
for(int i = 1; i <= m; ++i)
{
int c;
f >> c >> a >> b;
if(c == 1)
update(1,1,n);
else
{
maxim = -1;
query(1,1,n);
o << maxim << '\n';
}
}
return 0;
}