Pagini recente » Cod sursa (job #968353) | Cod sursa (job #80831) | Cod sursa (job #3255517) | Cod sursa (job #2805290) | Cod sursa (job #2400405)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int N=100009;
int n,q;
int v[N],aint[N*2];
void build()
{
for(int i=1;i<=n;i++)
aint[n+i-1]=v[i];
for(int i=n-1;i>=1;i--)
aint[i]=max(aint[i<<1],aint[(i<<1)|1]);
}
void update(int a,int b)
{
for(aint[a+=n-1]=b;a>=1;a>>=1)
aint[a>>1]=max(aint[a],aint[a^1]);
}
int query(int st,int dr)
{
int ans=0;
for(st+=n-1,dr+=n;st<dr;st>>=1,dr>>=1)
{
if(st&1)
ans=max(ans,aint[st++]);
if(dr&1)
ans=max(ans,aint[--dr]);
}
return ans;
}
int main()
{
fin.sync_with_stdio(false);
fin>>n>>q;
for(int i=1;i<=n;i++)
fin>>v[i];
build();
while(q)
{
q--;
int caz,a,b;
fin>>caz>>a>>b;
if(caz==0)
fout<<query(a,b)<<'\n';
else
update(a,b);
}
return 0;
}