Pagini recente » Cod sursa (job #1051548) | Cod sursa (job #1891342) | Cod sursa (job #1767757) | Cod sursa (job #1891517) | Cod sursa (job #3323836)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int lim=1e5+10;
int n,q,x,i,s[lim],t,y;
void create(int x,int val)
{
int k=x+n;
s[k]=val;
while(k)
{
s[k]=max(s[k],val);
k/=2;
}
}
void update(int x,int val)
{
x+=n;
s[x]=val;
x/=2;
while(x)
{
s[x]=max(s[2*x],s[2*x+1]);
x/=2;
}
}
int query(int l,int r)
{
l+=n;
r+=n;
int mx=0;
while(l<=r)
{
if(l%2==1)mx=max(mx,s[l]);
l=(l+1)/2;
if(r%2==0)mx=max(mx,s[r]);
r=(r-1)/2;
}
return mx;
}
void task()
{
fin>>t>>x>>y;
if(t==0)fout<<query(x-1,y-1)<<'\n';
else
update(x-1,y);
}
int main()
{
fin>>n>>q;
for(i=1;i<=n;i++)
{
fin>>x;
create(i-1,x);
}
while(q--)
{
task();
}
return 0;
}