Pagini recente » Cod sursa (job #1317250) | Cod sursa (job #1903159) | Cod sursa (job #2226656) | Cod sursa (job #844120) | Cod sursa (job #1915696)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arb[500005];
int a[100005];
int n, m, i, j,gx,gl,gr,x,y,t,max1;
void update(int ind, int st, int dr) {
if (st == dr) {
arb[ind] = a[st];
return;
}
int mij = (st+dr)/2;
if (mij < gx)
update(2*ind+1, mij+1,dr);
else update(2*ind, st, mij);
arb[ind] = max(arb[ind*2], arb[2*ind+1]);
}
void query(int ind, int st, int dr) {
if (gl <= st && dr <= gr) {
max1 = max(max1,arb[ind]);
return;
}
int mij = (st+dr)/2;
if (gl <= mij) query(2*ind, st, mij);
if (mij < gr) query(2*ind+1,mij+1,dr);
}
int main() {
f >> n >> m;
for (i = 1; i <= n; i++) {
f >> a[i];
gx = i;
update(1,1,n);
}
for (i = 1; i <= m; i++) {
f >> t >> x >> y;
if (t == 1) {
gx = x;
a[x]=y;
update(1,1,n);
}
else {
max1 = 0;
gl = x, gr = y;
query(1,1,n);
g << max1 << '\n';
}
}
return 0;
}