Pagini recente » Cod sursa (job #478726) | Cod sursa (job #2841192) | Istoria paginii runda/concurs.info/clasament | Cod sursa (job #1864658) | Cod sursa (job #2106079)
#include <bits/stdc++.h>
#define Nmax 100001
using namespace std;
int n,N,v[3*Nmax],q,t,a,b;
void create(){
for (int i=N-1;i>=1;i--)
v[i] = max(v[i*2+1],v[i*2]);
}
void update(int pos,int val){
for (pos += N-1,v[pos] = val; pos>1; pos/=2)
v[pos/2] = max(v[pos],v[pos^1]);
}
int query(int st,int dr){
int res = 0;
for (st += N-1,dr += N;st<dr;st/=2,dr/=2){
if (st&1) res = max(res,v[st++]);
if (dr&1) res = max(res,v[--dr]);
}
return res;
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
cin>>n>>q;
N = 1;
while (N<n) N*=2;
for (int i=1;i<=n;i++)
cin>>v[i+N-1];
create();
while (q--){
cin>>t>>a>>b;
if (t==1) update(a,b);
else cout<<query(a,b)<<'\n';
}
return 0;
}