Pagini recente » Cod sursa (job #1094281) | ojji | Cod sursa (job #1581419) | Cod sursa (job #2326925) | Cod sursa (job #1119802)
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int N,M,maxarb[400010],start,stop,val,pos,maxim;
void actualizare(int nod, int st, int dr) {
int div;
if(st==dr) {
maxarb[nod]=val;
return ;
}
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) {
int div;
if(start<=st && dr<=stop) {
if(maxim<maxarb[nod])
maxim=maxarb[nod];
return ;
}
div=(st+dr)/2;
if(start<=div)
interogare(2*nod,st,div);
if(div<stop)
interogare(2*nod+1,div+1,dr);
}
int main() {
int y,x,i,tip;
in>>N>>M;
for(i=1;i<=N;i++) {
in>>val;
pos=i;
actualizare(1,1,N);
}
for(i=1;i<=M;i++) {
in>>tip>>x>>y;
if(tip==1) {
val=y;
pos=x;
actualizare(1,1,N);
}
if(tip==0) {
maxim=-1;
start=x;
stop=y;
interogare(1,1,N);
out<<maxim<<'\n';
}
}
in.close();
out.close();
return 0;
}