Pagini recente » Cod sursa (job #1145945) | Cod sursa (job #2000068) | Cod sursa (job #1571736) | Cod sursa (job #1686429) | Cod sursa (job #166280)
Cod sursa(job #166280)
#include<fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define MAX 100000
int a[5*MAX],n,m,val,start,end,poz,k,mAx;
#define Max(a,b) ((a)>(b)?(a):(b))
void modi(int,int,int);
void find(int,int,int);
int main()
{
fin>>n>>m;
for(k=1;k<=n;k++)
{
poz=k;
fin>>val;
modi(1,1,n);
}
while(m--)
{
fin>>k;
if(k)
{
fin>>poz>>val;
modi(1,1,n);
continue;
}
fin>>start>>end;
mAx=0;
find(1,1,n);
fout<<mAx<<'\n';
}
return 0;
}
void modi(int k,int i,int j)
{
if(i==j)
{
a[k]=val;
return;
}
int mij=(i+j)/2;
if(poz<=mij) modi(2*k,i,mij);
else modi(2*k+1,mij+1,j);
a[k]=Max(a[2*k],a[2*k+1]);
}
void find(int k,int i,int j)
{
if(start<=i&&j<=end)
{
mAx=Max(mAx,a[k]);
return;
}
int mij=(i+j)/2;
if(start<=mij) find(2*k,i,mij);
if(mij<end) find(2*k+1,mij+1,j);
}