Pagini recente » Cod sursa (job #2247303) | oniprec | Cod sursa (job #831556) | Cod sursa (job #3136158) | Cod sursa (job #2704967)
#include <bits/stdc++.h>
#define rpd ios_base :: sync_with_stdio(0); cin.tie(0);
#define ll long long
#define fs first
#define sc second
#define pb push_back
#define mod 666013
#define NMAX 100000 + 100
using namespace std;
ifstream in( "arbint.in" );
ofstream out( "arbint.out");
int aint[4 * NMAX], v[NMAX], n, q, poz, val, L, R, ans;
void build(int nod,int st,int dr)
{
if(st==dr)
{
aint[nod]=v[st];
return;
}
int mid=(st+dr)/2;
build(nod<<1,st,mid);
build(nod<<1|1,mid+1,dr);
aint[nod]=max(aint[nod<<1],aint[nod<<1|1]);
}
void update(int nod,int st,int dr)
{
if(st==dr)
{
aint[nod]=val;
return;
}
int mid=(st+dr)/2;
if(poz<=mid)
update(nod<<1,st,mid);
else
update(nod<<1|1,mid+1,dr);
aint[nod]=max(aint[nod<<1],aint[nod<<1|1]);
}
void query(int nod,int st,int dr)
{
if(L<=st&&R>=dr)
{
ans=max(ans,aint[nod]);
return;
}
int mid=(st+dr)/2;
if(L<=mid)
query(nod<<1,st,mid);
if(R>mid)
query(nod<<1|1,mid+1,dr);
}
main()
{
rpd;
int n,q;
in>>n>>q;
for(int i=1;i<=n;++i)
in>>v[i];
build(1,1,n);
while(q--)
{
int t;
in>>t;
if(t==0)
{
in>>L>>R;
ans=0;
query(1,1,n);
out<<ans<<'\n';
}
else
{
in>>poz>>val;
update(1,1,n);
}
}
}