Pagini recente » Cod sursa (job #969153) | Cod sursa (job #490615) | Monitorul de evaluare | Cod sursa (job #1421004) | Cod sursa (job #936697)
Cod sursa(job #936697)
#include <fstream>
using namespace std;
#define LE 100666
#include <cmath>
ifstream f("arbint.in");ofstream g("arbint.out");
int aa,x,val,n,m,le,i,a[LE],buc[LE],typ,bb;
void update(int pos,int value)
{
a[pos]=value;
for(;((pos-1)%le)!=0;pos--);
buc[pos]=0;
for(int i=pos;i<=pos+le-1;++i)
buc[pos]=max(buc[pos],a[i]);
}
int query(int st,int dr)
{
int result=0;
for(;st<=dr;)
if (((st-1)%le==0)&&st+le-1<=dr)
{
result=max(result,buc[st]);
st+=le;
}
else
{
result=max(result,a[st]);
++st;
}
return result;
}
int main()
{
f>>n>>m;
le=sqrt(n)+1;
for(i=1;i<=n;++i)
{
f>>a[i];
update(i,a[i]);
}
for(i=1;i<=m;++i)
{
f>>typ;
if(typ==0)
{
f>>aa>>bb;
g<<query(aa,bb)<<'\n';
}
else
{
f>>x>>val;
update(x,val);
}
}
f.close();g.close();
return 0;
}