Pagini recente » Cod sursa (job #1119182) | Cod sursa (job #2802978) | Cod sursa (job #716286) | Cod sursa (job #782102) | Cod sursa (job #544265)
Cod sursa(job #544265)
#include<fstream.h>
ifstream f("arbint.in");
ofstream g("arbint.out");
int N,M,MaxArb[400071],val,pos,maxim,a,b;
inline int Maxim(int a,int b)
{ if(a>b) return a;
return b;
}
void update(int,int,int);
void query(int,int,int);
int main()
{ int x,i;
f>>N>>M;
for(i=1;i<=N;i++)
{ f>>x;
pos=i; val=x;
update(1,1,N);
}
for(i=1;i<=M;i++)
{ f>>x>>a>>b;
if(0==x)
{ maxim=-1;
//start=a; finish=b;
query(1,1,N);
g<<maxim<<'\n';
}
else {pos=a; val=b;
update(1,1,N);
}
}
f.close(); g.close();
return 0;
}
void update(int x,int st,int dr)
{ if(st==dr)
{ MaxArb[x]=val; return; }
int m=(st+dr)/2;
if(pos<=m) update(2*x,st,m);
else update(2*x+1,m+1,dr);
MaxArb[x]=Maxim(MaxArb[2*x],MaxArb[2*x+1]);
}
void query(int x,int st,int dr)
{ if(a<=st&&dr<=b)
{ if(maxim<MaxArb[x]) maxim=MaxArb[x]; return;}
int m=(st+dr)/2;
if(a<=m) query(2*x,st,m);
if(m<b) query(2*x+1,m+1,dr);
}