Pagini recente » Cod sursa (job #1529960) | Cod sursa (job #1931925) | Cod sursa (job #2331609) | Cod sursa (job #1277018) | Cod sursa (job #357984)
Cod sursa(job #357984)
#include<iostream.h>
#include<fstream.h>
using namespace std;
int n,m,ok,q,w,max1,arb[500001];
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int maxf(int a,int b) {
return (a>b)?a:b;
}
void constr(int nod,int st,int dr) {
if(st>dr)
return;
if(st==dr) {
arb[nod]=w;
return;
}
int mij=(st+dr)>>1;
if(q<=mij)
constr(nod<<1,st,mij);
else
constr((nod<<1)+1,mij+1,dr);
arb[nod]=maxf(arb[nod<<1],arb[(nod<<1)+1]);
}
void query(int nod,int st,int dr) {
if(q<=st&&w>=dr) {
if(max1<arb[nod])
max1=arb[nod];
return;
}
int mij=(st+dr)>>1;
if(q<=mij)
query(nod<<1,st,mij);
if(mij<w)
query((nod<<1)+1,mij+1,dr);
}
void citire () {
fin>>n>>m;
for(int i=1;i<=n;i++){
fin>>w;
q=i;
constr(1,1,n);
}
for(int j=0;j<m;j++) {
fin>>ok>>q>>w;
if(ok==0) {
max1=-1;
query(1,1,n);
fout<<max1<<"\n";
}
else{
//a[q]=w;
constr(1,1,n);
}
}
}
int main() {
citire();
fin.close();
fout.close();
return 0;
}