Pagini recente » Cod sursa (job #2224989) | Cod sursa (job #1291315) | Cod sursa (job #2940262) | Cod sursa (job #656509) | Cod sursa (job #1856454)
#include<cstdio>
using namespace std;
int i, x, y, n, m, q, a[100001], mx;
inline int max(int a, int b){if (a>=b) return a; else return b;}
inline void update(int poz_real){
while (poz_real>0) {
a[poz_real]=max(a[2*poz_real], a[2*poz_real+1]);
poz_real/=2;
}
}
inline void place(int val, int poz_cautat){
int st=1, dr=n, mij, poz_real=1;
while (st<dr) {
mij=st+(dr-st)/2;
if (poz_cautat<=mij) {st=mij+1; poz_real=poz_real*2;}
else {dr=mij-1; poz_real=2*poz_real+1;}
}
a[poz_real]=x; update(poz_real/2);
}
inline void cauta(int st, int dr, int poz_real){
int mij=st+(dr-st)/2;
if ((x<=st)&&(dr<=y)) {if (a[poz_real]>mx) mx=a[poz_real]; return;}
if (x<=mij) cauta(x, mij, 2*poz_real);
if (mij< y) cauta(mij, x, 2*poz_real+1);
}
int main(){
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d", &n, &m);
for (i=1;i<=n;i++) {scanf("%d", &x); place(x, i);}
for (i=1;i<=m;i++) {
scanf("%d%d%d", &q, &x, &y); mx=-1;
if (q==1) place(y, x);
else if (q==0) {cauta(x, y, 1); printf("%d\n", mx);}
}
return 0;
}