Pagini recente » Cod sursa (job #854865) | Cod sursa (job #470209) | Cod sursa (job #984779) | Cod sursa (job #1639853) | Cod sursa (job #2203553)
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
#define mx 100050
#define maxim(a,b) (a>b)?a:b
int ST[mx], DR[mx], A[mx], arb[mx], N, M, k, sizea, X, Y;
void update();
int querry();
int main()
{
int tip;
cin>>N>>M;
for(int i=1;i<=N;i++)
cin>>A[i];
sizea=0;
while(sizea*sizea<=N)sizea++;
sizea--;
k=N/sizea+1;
for(int i=1;i*sizea<=N;i++){
arb[i]=-1;
ST[i]=sizea*(i-1)+1; DR[i]=sizea*i;
for(int nod=ST[i];nod<=DR[i];nod++)
arb[i]=maxim(arb[i],A[nod]);
}
for(int i=1;i<=M;i++){
cin>>tip>>X>>Y;
if(tip) update();
else cout<<querry()<<endl;
}
}
void update()
{
A[X]=Y;
for(int i=1;i<=k;i++)
{
if(X>=ST[i]&&X<=DR[i]){
arb[i]=-1;
/*for(int nod=ST[i];nod<=DR[i];nod++)
arb[i]=maxim(arb[i],A[nod]);*/
arb[i]=maxim(arb[i],A[X]);
break;
}
}
}
int querry()
{
int st=(1<<30),dr=-1, maxi=-1;
for(int i=1;i<=k;i++)
if(ST[i]>=X&&DR[i]<=Y){
if(st>=ST[i]) st=ST[i];
if(dr<=DR[i]) dr=DR[i];
maxi=maxim(maxi,arb[i]);
}
if(st==(1<<30)&&dr==-1) st=dr=Y;
for(int i=X;i<=st;i++)maxi=maxim(A[i],maxi);
for(int i=dr;i<=Y;i++)maxi=maxim(A[i],maxi);
return maxi;
}