Pagini recente » Cod sursa (job #1127327) | Cod sursa (job #240484) | Cod sursa (job #2140175) | Cod sursa (job #2136208) | Cod sursa (job #1081565)
#include<fstream>
using namespace std;
int n,m,maxarb[400010],start,finish,val,pos,maxim;
void Actualizare(int nod, int st, int dr) {
if ( st == dr ) {
maxarb[nod] = val;
return;
}
int div=(st+dr)/2;
if (pos<=div)
Actualizare(2*nod,st,div);
else
Actualizare(2*nod+1,div+1,dr);
if(maxarb[2*nod]>maxarb[2*nod+1])
maxarb[nod] = maxarb[2*nod];
else
maxarb[nod] = maxarb[2*nod+1];
}
void Interogare(int nod, int st, int dr) {
if ( start <=st && dr<= finish )
{
if ( maxim < maxarb[nod] )
maxim = maxarb[nod];
return;
}
int div=(st+dr)/2;
if (start<= div) Interogare(2*nod,st,div);
if ( div<finish ) Interogare(2*nod+1,div+1,dr);
}
int main() {
int a,b,cer,i;
ifstream in("arbint.in");
ofstream out("arbint.out");
in>>n>>m;
for(i=1;i<=n;i++) {
in>>val;
pos=i;
Actualizare(1,1,n);
}
for(i=1;i<=m;i++) {
in>>cer>>a>>b;
if(cer==0) {
maxim=-1;
start=a;
finish=b;
Interogare(1,1,n);
out<<maxim<<'\n';
}
else {
pos=a;
val=b;
Actualizare(1,1,n);
}
}
in.close();
out.close();
return 0;
}