Pagini recente » Cod sursa (job #2132373) | Cod sursa (job #228363) | Cod sursa (job #2265132) | Cod sursa (job #791426) | Cod sursa (job #3264409)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin ("arbint.in");
ofstream cout ("arbint.out");
long long v[100000],batog[400],r;
int query (int a,int b)
{
int max=0;
while (a%r!=0 && a<=b)
{
if (v[a]>max)
max=v[a];
a++;
}
while (a+r<=b)
{
if (batog[a/r]>max)
max=batog[a/r];
a+=r;
}
while (a<=b)
{
if (v[a]>max)
max=v[a];
a++;
}
return max;
}
void update(int a,int b)
{
v[a]=b;
a=(a/r)*r;
batog[a/r]=0;
if (v[a]>batog[a/r])
batog[a/r]=v[a];
a++;
while (a%r!=0)
{
if (v[a]>batog[a/r])
batog[a/r]=v[a];
a++;
}
}
int main()
{
int n,m,i;
cin>>n>>m;
r=sqrt(n);
for(i=0;i<n;i++)
{
cin>>v[i];
if (v[i]>batog[i/r])
batog[i/r]=v[i];
}
int c,a,b;
for (i=1;i<=m;i++)
{
cin>>c>>a>>b;
a--;
if (c==0)
{
b--;
cout<<query(a,b)<<endl;
}
if (c==1)
{
update(a,b);
}
}
return 0;
}