Pagini recente » Cod sursa (job #353641) | Cod sursa (job #3235257) | Cod sursa (job #2562211) | Cod sursa (job #2399404) | Cod sursa (job #2763319)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,m,v[100005],x,a,b,DIM,Max[400];
int gaseste(int i)
{
return i/DIM+(i%DIM!=0);
}
void update(int pos, int val)
{ v[pos]=val;
int grupa=gaseste(pos);
Max[grupa]=0;
for(int i=(grupa-1)*DIM+1;i<=grupa*DIM;i++)
Max[grupa]=max(Max[grupa],v[i]);
}
int query(int l, int r)
{ int rasp=0;
int grupast=gaseste(l);
int grupadr=gaseste(r);
if(grupadr==grupast)
{
for(int i=l;i<=r;i++)
rasp=max(rasp,v[i]);
return rasp;
}
for(int i=gaseste(l)+1;i<=gaseste(r)-1;i++)
rasp=max(rasp,Max[i]);
for(int i=l;i<=gaseste(l)*DIM;i++)
rasp=max(rasp,v[i]);
for(int i=(gaseste(r)-1)*DIM+1;i<=r;i++)
rasp=max(rasp,v[i]);
return rasp;
}
int main()
{ fin>>n>>m;
DIM=sqrt(n);
for(int i=1;i<=n;i++)
{ fin>>v[i];
int grupa=gaseste(i);
Max[grupa]=max(Max[grupa],v[i]);
}
for(int i=1;i<=m;i++)
{
fin>>x>>a>>b;
if(!x)
fout<<query(a,b)<< '\n';
else update(a,b);
}
return 0;
}