Pagini recente » Cod sursa (job #1292451) | Cod sursa (job #990433) | Cod sursa (job #2912679) | Cod sursa (job #1731213) | Cod sursa (job #2673040)
#include <fstream>
using namespace std;
#define N 400100
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, m, start, finish, val, poz, maxim, x, a, b;
int arb[N];
void update(int nod, int stg, int drp){
if(stg == drp){
arb[nod] = val;
return;
}
int mij = (stg + drp) / 2;
if(poz <= mij) update(2 * nod, stg, mij);
else update(2 * nod + 1, mij + 1, drp);
arb[nod] = max(arb[2 * nod], arb[2 * nod + 1]);
}
void query(int nod, int stg, int drp){
if(start <= stg && drp <= finish){
if(maxim < arb[nod]) maxim = arb[nod];
return;
}
int mij = (stg + drp) / 2;
if(start <= mij) query(2 * nod, stg, mij);
if(mij < finish) query(2 * nod + 1, mij + 1, drp);
}
int main()
{
in>>n>>m;
for(int i = 1; i <= n; i++){
in>>x;
poz = i, val = x;
update(1, 1, n);
}
for(int i = 1; i <= m; i++){
in>>x>>a>>b;
if(x == 0) {
maxim = -1;
start = a, finish = b;
query(1, 1, n);
out<<maxim<<'\n';
}
else{
poz = a, val = b;
update(1, 1, n);
}
}
in.close();
out.close();
return 0;
}