Pagini recente » Cod sursa (job #1478332) | Cod sursa (job #1727821) | Cod sursa (job #2214681) | Cod sursa (job #1094027) | Cod sursa (job #2762291)
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[100005],n,m,op,i,j,l,r,dim,st,dr,Max[350];
int g(int p){if(p%dim==0)return p/dim;return p/dim+1;}
void update(int poz,int val)
{
v[poz]=val;
int b=g(poz);
Max[b]=0;
for(int i=(b-1)*dim+1;i<=b*dim;++i)
Max[b]=max(Max[b],v[i]);
}
int query(int l,int r)
{
int g1=g(l),g2=g(r);
int rez=0;
if(g1==g2)
{
for(int i=l;i<=r;++i);
rez=max(rez,v[i]);
}
else {
for(int i=g1+1;i<g2;++i)
rez=max(rez,Max[i]);
for(int i=l;i<=g1*dim;++i)
rez=max(rez,v[i]);
for(int i=(g2-1)*dim+1;i<=r;++i)
rez=max(rez,v[i]);
}
return rez;
}
int main()
{
fin>>n>>m;
dim=sqrt(n);
for(i=1;i<=n;i++)
{
fin>>v[i];
Max[g(i)]=max(Max[g(i)],v[i]);
}
while(m--)
{
fin>>op>>st>>dr;
if(!op)
fout<<query(st,dr)<<'\n';
else update(st,dr);
}
return 0;
}