Pagini recente » Cod sursa (job #729482) | Cod sursa (job #2799971) | Cod sursa (job #2950938) | Cod sursa (job #2492072) | Cod sursa (job #1690959)
#include <fstream>
#define MAXINT 2000000000
using namespace std;
int n, m, v[100002], aint[300000], minim, sf, inc, nou, aux, i, j;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
void arbeit(int now, int st, int dr){
if(st==dr) aint[now]=v[st];
else{
int mij=(st+dr)/2;
arbeit(2*now, st, mij);
arbeit(2*now+1, mij+1, dr);
aint[now]=max(aint[2*now], aint[2*now+1]);
}
}
void querry(int nod, int st, int dr){
if(inc<=st && sf>=dr){
minim=max(minim, aint[nod]);
return;
}
int mij=(st+dr)/2;
if(inc<=mij) querry(2*nod, st, mij);
if(sf>=mij+1) querry(2*nod+1, mij+1, dr);
}
void update(int nod, int st, int dr){
if(st==dr){
aint[nod]=j; //fout<<" "<<aint[nod];
return;
}
int mij=(st+dr)/2;
if(nou<=mij) update(2*nod, st, mij);
if(nou>mij) update(2*nod+1, mij+1, dr);
aint[nod]=max(aint[2*nod], aint[2*nod+1]);
}
int main()
{
fin>>n>>m;
for(i=1; i<=n; i++) fin>>v[i];
arbeit(1,1,n);
//for(i=1; i<=2*n; i++) fout<<aint[i]<<endl;
for(i=0; i<m; i++){
fin>>aux;
if(aux){
fin>>nou>>j;
v[nou]=j;
update(1,1,n);
}else{
minim=0;
fin>>inc>>sf;
querry(1,1,n);
fout<<minim<<endl;
//fout<<inc<<" "<<sf<<endl;
}
}
//for(i=1; i<=2*n; i++) fout<<aint[i]<<endl;
return 0;
}