Pagini recente » Cod sursa (job #2206098) | Cod sursa (job #2863184) | Cod sursa (job #2638925) | Cod sursa (job #2434607) | Cod sursa (job #3123775)
#include <fstream>
#include <tgmath.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, arb[20][100010], c, x, y, lg, i, j, k, lgc;
void reinit(int l, int pos)
{
if(l>lgc)
return;
if(pos-(1<<l)>0)
{
arb[l+1][pos-(1<<l)]=max(arb[l][pos], arb[l][pos-(1<<l)]);
reinit(l+1, pos-(1<<l));
}
if(pos+(1<<l)<=n-(1<<l)+1)
{
arb[l+1][pos]=max(arb[l][pos], arb[l][pos+(1<<l)]);
reinit(l+1, pos);
}
}
int main()
{
fin>>n>>m;
lgc=int(log2(n));
for(i=1; i<=n; i++)
{
fin>>arb[0][i];
}
for(i=1; i<=lgc; i++)
{
for(j=1; j<=n-(1<<i)+1; j++)
arb[i][j]=max(arb[i-1][j], arb[i-1][j+(1<<(i-1))]);
}
for(k=1; k<=m; k++)
{
fin>>c>>x>>y;
if(c==0)
{
lg=y-x+1;
fout<<max(arb[int(log2(lg))][x], arb[int(log2(lg))][y-(1<<int(log2(lg)))+1])<<'\n';
}
else
{
arb[0][x]=y;
reinit(0, x);
/*for(i=1; i<=int(log2(n)); i++)
{
for(j=1; j<=n-(1<<i)+1; j++)
fout<<arb[i][j]<<' ';
fout<<'\n';
}*/
}
}
return 0;
}