Pagini recente » Cod sursa (job #948473) | Cod sursa (job #1391573) | Cod sursa (job #1157165) | Cod sursa (job #1689227) | Cod sursa (job #1148215)
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
#define inf 9999999
int size,n,m,v[100001],st[401],dr[401],smen[400],i,j,tip,a,b;
void update()
{
v[a]=b;
for(int i=1; i*i<=n; i++)
{
if(st[i]>=a && dr[i]<=b)
{
smen[i]=-1;
for(int j=st[i]; j<=dr[i]; j++)
smen[i]=max(smen[i],v[j]);
break;
}
}
}
int interogare()
{
int ST=inf, DR=-inf,maxim=-inf;
int i,j;
for(i=1; i*i<=n; i++)
{
if(a<=st[i] && dr[i]<=b)
{
if(st[i]<ST)
ST=st[i];
if(dr[i]>DR)
DR=dr[i];
for(j=st[i]; j<=dr[i]; j++)
maxim=max(maxim,v[j]);
}
if(DR>=b)
break;
}
if(ST==inf && DR==-inf) ST=DR=b;
for(i=a; i<=ST; i++)
maxim=max(maxim,v[i]);
for(i=DR; i<=b; i++)
maxim=max(maxim,v[i]);
return maxim;
}
int main()
{
cin>>n>>m;
for(i=1; i<=n; i++)
cin>>v[i];
while(size*size<=n)
size++;
size--;
for(i=1; i*i<=n; i++) // impart vectorul
{
st[i]=size*(i-1)+1; dr[i]=size*i; smen[i]=-1;
for(j=st[i]; j<=dr[i]; j++)
smen[i]=max(smen[i],v[j]);
}
for(i=1; i<=m; i++) // trec la rezolvare
{
cin>>tip>>a>>b;
if(tip==1)
update();
else
cout<<interogare()<<"\n";
}
}