Pagini recente » Cod sursa (job #2684497) | Cod sursa (job #2842751) | Cod sursa (job #418936) | Cod sursa (job #116301) | Cod sursa (job #2344941)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int NMAX = 100005;
const int SQRTMAX = 350;
int v[NMAX];
int a[SQRTMAX];
int n,m;
int find_interv(int x,int lgint)
{
int nr=x/lgint;
if(x%lgint==0) return nr;
return (nr+1);
}
void actualizare(int interval,int lgint)
{
int start=lgint*(interval-1)+1;
int stop=start+lgint-1;
int maxim=0;
for(int i=start;i<=stop;i++)
{
if(v[i]>maxim) maxim=v[i];
}
a[interval]=maxim;
}
int main()
{
fin >> n >> m;
for(int i=1;i<=n;i++) fin >> v[i];
int rad=sqrt(n);
int k=0,maxim=0;
for(int i=1;i<=n;i++)
{
if(v[i]>maxim) maxim=v[i];
if(i%rad==0)
{
a[++k]=maxim;
maxim=0;
}
}
if(rad*rad!=n) a[++k]=maxim;
int operatie,x,y;
for(int i=1;i<=m;i++)
{
fin >> operatie >> x >> y;
int maxim=0;
if(operatie==1)
{
v[x]=y;
int interv = find_interv(x,rad);
actualizare(interv,rad);
}
else if(operatie==0)
{
int interv1 = find_interv(x,rad);
int interv2 = find_interv(y,rad);
if(interv1==interv2) fout << a[interv1];
else
{
for(int i=interv1+1;i<=interv2-1;i++)
{
if(a[i]>maxim) maxim=a[i];
}
int st=rad*(interv2-1)+1;
int dr=rad*interv1;
for(int i=x;i<=dr;i++) if(v[i]>maxim) maxim=v[i];
for(int i=y;i>=st;i--) if(v[i]>maxim) maxim=v[i];
}
fout << maxim << '\n';
}
}
return 0;
}