Pagini recente » Cod sursa (job #2807032) | Cod sursa (job #2940299) | Cod sursa (job #3208441) | Cod sursa (job #161647) | Cod sursa (job #2289221)
#include <bits/stdc++.h>
using namespace std;
const int mxn = 100 * 1000 + 10;
int a[ 4 * mxn ];
int v[ mxn ];
int n, q;
int h;
int p, st, sf;
int mx;
void build(int x, int y, int nod){
if(x == y){
a[ nod ] = v[ x ];
}
else{
int mid = (x + y) / 2;
build(x, mid, 2 * nod);
build(mid + 1, y, 2 * nod + 1);
a[ nod ] = max(a[ 2 * nod ], a[ 2 * nod + 1]);
}
}
int update(int x, int y, int nod){
if(x == y){
a[ nod ] = v[ x ];
}
else{
int mij = (x + y) / 2;
if(p <= mij){
update(x, mij, 2 * nod);
}
else{
update(mij + 1, y, 2 * nod + 1);
}
a[ nod ] = max(a[ 2 * nod ], a[ 2 * nod + 1]);
}
}
int query(int x, int y, int nod){
if(st <= x && y <= sf){
return a[ nod ];
}
else{
int mij = (x + y)/2;
int mx1 = -1, mx2 = -1;
if(st <= mij)
mx1 = query(x, mij, 2 * nod);
if(mij < sf)
mx2 = query(mij + 1, y, 2 * nod + 1);
return max(mx1, mx2);
}
}
int main()
{
ifstream cin("arbint.in");
ofstream cout("arbint.out");
cin>> n >> q;
for(int i = 1; i <= n; i++){
cin>> v[ i ];
}
build(1, n, 1);
for(int i = 1, k, x, y; i <= q; i++){
cin>> k >> x >> y;
if(k == 0){
st = x;
sf = y;
cout<< query(1, n, 1) << '\n';
}
else{
v[ x ] = y;
p = x;
update(1, n, 1);
}
}
return 0;
}