Pagini recente » Cod sursa (job #3248053) | Cod sursa (job #662614) | Cod sursa (job #2099466) | Cod sursa (job #171152) | Cod sursa (job #2058537)
#include <iostream>
#include <fstream>
#define Nmax 100005
#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=0; i<n; i++)
fin>>v[i];
}
void Initializare_intervale ()
{
int i;
for (i=0; i<=n; i++)
if (v[i]>intervale[i/lg]) intervale[i/lg]=v[i];
}
int Max_a_b (int a,int b)
{
a--;
b--;
int maxim=0,k,i,j;
k = a/lg + 1;
for (i=k+1; i<=b/lg-1; i++)
if (intervale[i]>maxim) maxim=intervale[i];
//if (b/lg*lg+1>=a)
if(a/lg!=b/lg)
{
for (j=a; j/lg==a/lg; j++)
if (v[j]>maxim) maxim=v[j];
for (i=b; i/lg==b/lg&&i; i--)
if (v[i]>maxim) maxim=v[i];
}
else
{
for (i=a; i<=b; i++)
if (v[i]>maxim) maxim=v[i];
}
return maxim;
}
void Update_a_b (int a,int b)
{
a--;
int k=a/lg,i;
v[a]=b;
//fout<<k<<"morcovi ";
intervale[k]=0;
for (i=k*lg; i<=(k)*lg+lg-1; i++)
if (v[i]>intervale[k]) intervale[k]=v[i];
}
int main()
{
int i,x,y,z,j;
Citire();
lg=(int)sqrt(n);
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;
}