Pagini recente » Cod sursa (job #2424044) | Cod sursa (job #1745957) | Cod sursa (job #1364576) | Cod sursa (job #318329) | Cod sursa (job #2053200)
#include <iostream>
#include <fstream>
#define Nmax 100000
#include <cmath>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,m,v[Nmax];
int intervale[Nmax],lg;
void Citire ()
{
int i;
fin>>n>>m;
for (i=1;i<=n;i++)
fin>>v[i];
}
void Initializare_intervale ()
{
int i,nr=0,k;
lg=sqrt(n);
k=1;
for (i=1;i<=n;i++)
{
nr++;
if (nr>lg)
{
nr=1;
k++;
intervale[k]=v[i];
}
else
if (v[i]>intervale[k])
intervale[k]=v[i];
}
}
int Max_a_b (int a ,int b)
{
int maxim=0,k,i,j;
k = a/lg + 1;
for (i=k+1;i*lg<=b;++i)
if (intervale[i]>maxim) maxim=intervale[i];
for (j=b/lg*lg;j<=b;++j)
if (v[j]>maxim) maxim=v[j];
for (i=a;i<k*lg;++i)
if (v[i]>maxim) maxim=v[i];
return maxim;
}
void Update_a_b (int a,int b)
{
int k=a/lg,i;
v[a]=b;
//fout<<k<<"morcovi ";
intervale[k]=0;
for (i=k*lg;i<(k+1)*lg;++i)
if (v[i]>intervale[k]) intervale[k]=v[i];
}
int main()
{
int i,x,y,z,j;
Citire();
Initializare_intervale();
for (i=1;i<=m;i++)
{
fin>>x>>y>>z;
if (x==0) fout<<Max_a_b(y,z)<<"\n";
else {Update_a_b(y,z);
/*for (j=1;j*lg<=n;j++)
fout<<intervale[j]<<" ";
fout<<"\n";*/
}
}
return 0;
}