Pagini recente » Cod sursa (job #1057330) | Cod sursa (job #1665469) | Cod sursa (job #1266825) | Cod sursa (job #1998796) | Cod sursa (job #1995488)
#include<fstream>
#include<cmath>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int maxim(int a,int b){
if(a>b)
return a;
return b;
}
const int NMAX=100005,k=log2(2*NMAX)+1;
int arb[1<<k],a,b,n,m,cmax;
void querry(int nod,int st,int dr){
if(a<=st&&dr<=b){
if(arb[nod]>cmax)
cmax=arb[nod];
}
else{
int mij=(st+dr)/2;
if(a<=mij)
querry(2*nod,st,mij);
if(mij<b)
querry(2*nod+1,mij+1,dr);
}
}
void add(int nod,int st,int dr){
if(st==dr)
arb[nod]=b;
else{
int mij=(st+dr)/2;
if(a<=mij)
add(2*nod,st,mij);
else
add(2*nod+1,mij+1,dr);
arb[nod]=maxim(arb[2*nod],arb[2*nod+1]);
}
}
void citire(){
int i,nr;
fin>>n>>m;
for(i=1;i<=n;++i){
fin>>nr;
a=i; b=nr;
add(1,1,n);
}
}
void solve(){
while(m--){
int cod;
fin>>cod>>a>>b;
if(cod==0){
cmax=0;
querry(1,1,n);
fout<<cmax<<'\n';
}
else
add(1,1,n);
}
}
int main(){
citire();
solve();
}