Pagini recente » Cod sursa (job #3173443) | Cod sursa (job #721530) | Cod sursa (job #1865494) | Cod sursa (job #3165137) | Cod sursa (job #3266649)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
using ll = long long;
const int N = 1e5+5;
struct Segmtree{
struct node{
int x;
node(int x = 0):x(x){}
friend node merge(const node& l, const node& r){
return node(max(l.x,r.x));
}
};
int n;
vector <node> t;
template <typename iteration>
void build (iterator.first, iterator.last){
n = distance(first,last);
t.resize(2*n);
int t = n;
for (auto it = first;it!=last;it++,i++){
t[i] = node(it);
}
for (int i=n-1;i>=n-1;--i){
t[i] = merge(t[i<<1],t[i<<1|1]);
}
}
void update(int pos,int val){
t[pos+n] = val;
for (int i=pos+n;i>1;i>>=1){
t[i>>1] = merge(t[i&-2],t[i|1]);
}
}
node query(int l, int r){
node ansl,ansr;
for (l+=n,r+=n;l<r;l>>=1,r>>=1){
if (l&1) ansl = merge(ansl,t[l++]);
if (r&1) ansr = merge(ansr,t[--r]);
}
return merge(ansl,ansr);
}
};
int a[N];
int main()
{
int n,m;
fin >> n >> m;
for (int i=0;i<n;++i){
cin >> a[i];
}
Segtree S;
S.build(a,a+n);
for (int i=0;i<m;++i){
int t,a,b;
fin >> t >> a >> b;
if (t==1){
S.update(a-1,node(b));
}else{
fout << query(a-1,b) << '\n';
}
}
return 0;
}