Pagini recente » Cod sursa (job #1014825) | Cod sursa (job #2837201) | Cod sursa (job #1964586) | Cod sursa (job #2679948) | Cod sursa (job #1081857)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define MAX 300010
int arb[MAX];
int a, b;
void update(int nod, int val)
{
arb[nod]=val;
nod>>=1;
while(nod)
{
arb[nod]=max(arb[nod*2], arb[nod*2+1]);
nod>>=1;
}
}
int query(int nod, int st, int dr)
{
if(a<=st && dr<=b)
{
return arb[nod];
}
if(dr<a || b<st)
return 0;
int mid=(dr+st)>>1;
return max(query(nod<<1, st, mid), query((nod<<1)+1, mid+1, dr));
}
int main()
{
int n, m, cn, i, x, y;
fin>>n>>m;
cn=n;
if(cn&(cn-1))
{
while(cn&(cn-1))
{
cn&=(cn-1);
}
cn<<=1;
}
for(i=1;i<=n;i++)
{
fin>>x;
update(cn-1+i, x);
}
while(m--)
{
int tip;
fin>>tip;
if(tip)
{
fin>>x>>y;
update(cn-1+x, y);
}
else
{
fin>>a>>b;
fout<<query(1, 1, cn)<<"\n";
}
}
fin.close();
fout.close();
}