Pagini recente » Borderou de evaluare (job #1569077) | Borderou de evaluare (job #1014292) | valentin | Cod sursa (job #773954) | Cod sursa (job #2256169)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
#define szam first
#define hely second
ifstream cin("arbint.in");
ofstream cout("arbint.out");
vector<pair<int,int> >v;
int n,m,i,k,a,b,c,j,ha,hb,maxi,av,bk;
int main()
{
cin>>n>>m;
k=sqrt(n);
v.resize(n);
vector<int>x(k);
for(i=0;i<n;++i)
{
cin>>v[i].szam;
if(i/k<k)
{
v[i].hely=i/k;
if(v[i].szam>x[i/k]) x[i/k]=v[i].szam;
}
else
{
v[i].hely=i/k-1;
if(v[i].szam>x[i/k-1]) x[i/k-1]=v[i].szam;
}
}
for(i=1;i<=m;++i)
{
cin>>c>>a>>b;
a--;
if(c==0)
{
b--;
ha=a/k;
hb=b/k;
if(hb==k)
hb--;
if(ha==k)
ha--;
if(ha==k-1) av=n-1;
else av=(ha+1)*k;
bk=hb*k;
maxi=0;
for(j=ha+1;j<hb;++j) if(x[j]>maxi) maxi=x[j];
for(j=a;j<min(av,b);++j) if(v[j].szam>maxi) maxi=v[j].szam;
for(j=max(bk,a);j<=b;++j) if(v[j].szam>maxi) maxi=v[j].szam;
cout<<maxi<<"\n";
}
else if(c==1)
{
if(b>x[v[a].hely])
{
x[v[a].hely]=b;
v[a].szam=b;
}
else if(v[a].szam==x[v[a].hely])
{
v[a].szam=b;
x[v[a].hely]=0;
for(j=k*v[a].hely;j<=v[a].hely+k-1;++j)
if(v[j].szam>x[v[a].hely]) x[v[a].hely]=v[j].szam;
if(v[a].hely==k-1)
for(j=j;j<=n;++j)
if(v[j].szam>x[v[a].hely]) x[v[a].hely]=v[j].szam;
}
else v[a].szam=b;
}
}
return 0;
}