Pagini recente » Cod sursa (job #2590589) | Cod sursa (job #2274344) | Cod sursa (job #2512881) | Cod sursa (job #858993) | Cod sursa (job #1034276)
#include <fstream>
#define dim 100001
using namespace std;
ifstream f("arbint.in"); ofstream g("arbint.out");
int N,M,X,Y,tip,size,K;
int A[dim],Arb[dim],St[dim],Dr[dim];
inline int Maxim(int a, int b) {return a>b ? a : b;}
void Update()
{ A[X]=Y;
for(int i=1; i*size<=N; i++)
if(St[i]<=X && X<=Dr[i])
{ Arb[i]=-1;
for(int j=St[i]; j<=Dr[i]; j++) Arb[i]=Maxim(Arb[i],A[j]);
break;
}
}
int Query()
{ int maxim = -1;
int st=(1<<30), dr=-1;
for(int i=1; i<=K; i++)
{ if(X<=St[i] && Dr[i]<=Y)
{ if(St[i]<st) st=St[i];
if(dr<Dr[i]) dr=Dr[i];
maxim = Maxim(maxim,Arb[i]);
}
if(Y<Dr[i]) break;
}
if(st==(1<<30) && dr==-1) st=dr=Y;
for(int i=X; i<=st; i++) maxim=Maxim(maxim,A[i]);
for(int i=dr; i<=Y; i++) maxim = Maxim(maxim,A[i]);
return maxim;
}
int main()
{ f>>N>>M;
for(int i=1;i<=N;i++) f>>A[i];
size=0;
while(size*size<=N) size++;
size--;
K=N/size;
for(int i=1; i*size<=N; i++)
{ Arb[i]=-1;
St[i]=size*(i-1)+1, Dr[i]=size*i;
for(int j=St[i]; j<=Dr[i]; j++) Arb[i]=Maxim(Arb[i],A[j]);
}
while(M--)
{ f>>tip>>X>>Y;
if(tip) Update(); else g<<Query()<<'\n';
}
}