Pagini recente » Cod sursa (job #2635082) | Cod sursa (job #807142) | Cod sursa (job #1956616) | Cod sursa (job #3227490) | Cod sursa (job #2288711)
#include <bits/stdc++.h>
#define Nmax 100005
#define ls (node<<1)
#define rs ls+1
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int SegmentTree[4*Nmax];
int v[Nmax];
int lsh,rsh,pos;
void build(int p, int q, int node)
{
if(p==q) SegmentTree[node]=v[p];
else
{
int m=(p+q)>>1;
build(p,m,ls);
build(m+1,q,rs);
SegmentTree[node]=max(SegmentTree[ls],SegmentTree[rs]);
}
}
void update(int p, int q, int node)
{
if(p==q) SegmentTree[node]=v[p];
else
{
int m=(p+q)>>1;
if(pos<=m)
update(p,m,ls);
else update(m+1,q,rs);
SegmentTree[node]=max(SegmentTree[ls],SegmentTree[rs]);
}
}
int query(int p, int q, int node)
{
if(lsh<=p and q<=rsh) return SegmentTree[node];
else
{
int m1,m2,m;
m1=m2=INT_MIN;
m=(p+q)>>1;
if(lsh<=m) m1=query(p,m,ls);
if(m+1<=rsh) m2=query(m+1,q,rs);
return max(m1,m2);
}
}
int main()
{
int n,m,op,x,y;
f>>n>>m;
for(int idx=1;idx<=n;idx++)
f>>v[idx];
build(1,n,1);
while(m--)
{
f>>op>>x>>y;
switch (op)
{
case 0:
{
lsh=x;
rsh=y;
g<<query(1,n,1)<<'\n';
break;
}
case 1:
{
v[x]=y;
pos=x;
update(1,n,1);
}
}
}
return 0;
}