Pagini recente » Cod sursa (job #965820) | Cod sursa (job #1784582) | Cod sursa (job #1582124) | Cod sursa (job #1298191) | Cod sursa (job #1581434)
#include <iostream>
#include <climits>
#include <fstream>
using namespace std;
int arb[3000010],a,b;
void build_arb_i(int i, int li, int lf)
{
if(li == lf)
{
arb[i] = b;
return;
}
int mij=(li+lf)/2;
if(mij >= a)
build_arb_i(i*2,li, mij);
else
build_arb_i(i*2+1,mij+1, lf );
arb[i] = max(arb[i*2], arb[i*2+1]);}
int maxim(int i,int li,int lf)
{
if(a<=li&&lf<=b)return arb[i];
int m=(li+lf)/2,v,mx=INT_MIN;
if(a<=m)
{
v=maxim(2*i,li,m);
if(v>mx)mx=v;
}
if(b>=m+1)
{
v=maxim(2*i+1,m+1,lf);
if(v>mx)mx=v;
}
return mx;
}
int main()
{
int n,i,c,m;
ifstream fin("arbint.in");
ofstream fout ("arbint.out");
fin>>n>>m;
for(i=1; i<=4*n; i++)arb[i]=-1;
for(a=1; a<=n; a++)
{
fin>>b;
build_arb_i(1,1,n);
}
for(i=1; i<=m; i++)
{
fin>>c>>a>>b;
if(c==0)
fout<<maxim(1,1,n)<<"\n";
else
build_arb_i(1,1,n);
}
return 0;
}