Pagini recente » Cod sursa (job #1716648) | Cod sursa (job #755069) | Cod sursa (job #1081874) | Cod sursa (job #2632617) | Cod sursa (job #1180406)
#include<fstream>
#include<cmath>
#include<algorithm>
#include<bitset>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,m,a[100005],sq[100005],lg,lungime,part[100005];
bitset<100005>viz;
inline void Citire()
{
int i;
fin>>n>>m;
for (i=1;i<=n;i++)
fin>>a[i];
}
inline void Imparte()
{
int i,k;
lg=sqrt(n);
lungime=0;
for (i=1;i<=n;i+=lg)
{
int maxim=-1;
viz[i]=1;
lungime++;
for (k=i;k<=i+lg-1 && k<=n;k++)
{
maxim=max(maxim,a[k]);
part[k]=lungime;
}
sq[lungime]=maxim;
}
}
inline void Rezolva()
{
int i,j,op,x,y,lg,maxim;
lg=sqrt(n);
for (i=1;i<=m;i++)
{
fin>>op>>x>>y;
if (!op)
{
maxim=-1;
while (!viz[x] && x<=y)
{
maxim=max(maxim,a[x]);
x++;
}
while (x+lg-1<=y)
{
maxim=max(maxim,sq[part[x]]);
x+=lg-1;
}
while (x<=y)
{
maxim=max(maxim,a[x]);
x++;
}
fout<<maxim<<"\n";
}
else
{
maxim=-1;
a[x]=y;
j=x;
while (!viz[j]) j--;
maxim=max(maxim,a[j]);
j++;
while (!viz[j] && j<=n)
{
maxim=max(maxim,a[j]);
j++;
}
sq[part[x]]=maxim;
}
}
}
int main()
{
Citire();
Imparte();
Rezolva();
return 0;
}