Pagini recente » Cod sursa (job #559717) | Cod sursa (job #800998) | Cod sursa (job #2228561) | Cod sursa (job #1094988) | Cod sursa (job #2278171)
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int N,M,a[100005],mx[400],R;
void Actualizare(int x,int y)
{
int i;
a[x]=y;
mx[x/R]=0;
for(i=R*(x/R); i<R*(x/R+1); i++)
mx[x/R]=max(mx[x/R],a[i]);
}
int Afisare(int x, int y)
{
int i,sol=0;
if(x/R<y/R){
for(i=x/R+1; i<y/R; i++)
{
sol=max(sol,mx[i]);
// cout<<i<<" ";
}
//cout<<"*";
for(i=x; i<R*(x/R+1); i++)
{
sol=max(sol,a[i]);
//cout<<i<<" ";
}
//cout<<"*";
for(i=R*(y/R); i<=y; i++)
{
sol=max(sol,a[i]);
//cout<<i<<" ";
}
}
else for(i=x; i<=y; i++)
sol=max(sol,a[i]);
return sol;
}
int main()
{
int x,y,i,p;
fin>>N>>M;
R=int(sqrt(double(N)));
//cout<<"{{"<<R<<"}}";
for(i=1; i<=N; i++)
fin>>a[i];
for(i=1; i<=N; i++)
mx[i/R]=max(mx[i/R],a[i]);
for(i=1; i<=M; i++)
{
fin>>p>>x>>y;
if(p==1)
Actualizare(x,y);
else
fout<<Afisare(x,y)<<"\n";
}
}