Pagini recente » Cod sursa (job #2948276) | Cod sursa (job #701092) | Cod sursa (job #2832908) | Cod sursa (job #922810) | Cod sursa (job #2603596)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int nmax=100005;
int n,m,sz,k;
int a[nmax],arb[nmax];
int st[nmax],dr[nmax];
void read()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
fin>>a[i];
sz=0;
while(sz*sz<=n)sz++;
sz--;
k=n/sz+1;
for(int i=1;i*sz<=n;i++)
{
arb[i]=-1;
st[i]=sz*(i-1)+1;
dr[i]=sz*i;
for(int j=st[i];j<=dr[i];j++)
arb[i]=max(arb[i],a[j]);
}
}
void answer(int x,int y)
{
int mx=-1;
int s=nmax+1,d=-1;
for(int i=1;i<=k;i++)
if(x<=st[i] && dr[i]<=y)
{
if(st[i]<s)s=st[i];
if(dr[i]>d)d=dr[i];
mx=max(mx,arb[i]);
}
else if(dr[i]>y)break;
if(s==nmax+1 && d==-1)s=d=y;
for(int i=x;i<=s;i++)
mx=max(mx,a[i]);
for(int i=d;i<=y;i++)
mx=max(mx,a[i]);
fout<<mx<<"\n";
}
void upd(int x,int y)
{
a[x]=y;
for(int i=1;i*sz<=n;i++)
if(x>=sz*(i-1)+1 && x<=sz*i)
{
arb[i]=-1;
for(int j=sz*(i-1)+1;j<=sz*i;j++)
arb[i]=max(arb[i],a[j]);
break;
}
}
void solve()
{
for(int i=1;i<=m;i++)
{
int op,x,y;
fin>>op>>x>>y;
if(!op)answer(x,y);
else upd(x,y);
}
}
int main()
{
read();
solve();
return 0;
}