/* POINT UPDATE + RANGE SUM/MIN/MAX QUERIES + ITERATIVE */
using namespace std;
#include <bits/stdc++.h>+
struct SegTree{
typedef long long ll;
vector<ll> S; ll n,tt;
// pass 't' as {-1,0,1} for {min,sum,max} segtree
SegTree(vector<ll> arr,int t){
n=arr.size(); S.assign(2*n,0); tt=-1e18*t;
for(int i=0;i<n;i++) S[n+i]=arr[i];
for(int i=n-1;i>0;i--)S[i]=fn(S[i*2],S[i*2+1]);
}
void Updt(int p,int v){
S[p+n]=v; p+=n;
for(int i=p;i>1;i/=2)S[i/2]=fn(S[i],S[i^1]);
}
ll Kqry(int l,int r){
ll res=tt;
for(l+=n,r+=n;l<r;l/=2,r/=2){
if(l&1)res=fn(res,S[l++]);
if(r&1)res=fn(res,S[--r]);
}return res;
}
inline ll fn(ll a,ll b){
return(tt==0)?a+b:(tt<0)?max(a,b):min(a,b);
}
};
int main(){
vector<long long> a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
SegTree S1(a,-1);
cout<<S1.Kqry(3,6)<<"\n";
S1.Updt(5,-1);
cout<<S1.Kqry(3,6)<<"\n";
}
CgoJCQkvKiBQT0lOVCBVUERBVEUgKyBSQU5HRSBTVU0vTUlOL01BWCBRVUVSSUVTICsgSVRFUkFUSVZFICovIAoKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPisKCnN0cnVjdCBTZWdUcmVlewoJdHlwZWRlZiBsb25nIGxvbmcgbGw7IAoJdmVjdG9yPGxsPiBTOyBsbCBuLHR0OyAKCS8vIHBhc3MgJ3QnIGFzIHstMSwwLDF9IGZvciB7bWluLHN1bSxtYXh9IHNlZ3RyZWUKCVNlZ1RyZWUodmVjdG9yPGxsPiBhcnIsaW50IHQpeyAgIAoJCW49YXJyLnNpemUoKTsgUy5hc3NpZ24oMipuLDApOyB0dD0tMWUxOCp0OwoJCWZvcihpbnQgaT0wO2k8bjtpKyspICBTW24raV09YXJyW2ldOwoJCWZvcihpbnQgaT1uLTE7aT4wO2ktLSlTW2ldPWZuKFNbaSoyXSxTW2kqMisxXSk7ICAgICAgICAKCX0KCXZvaWQgVXBkdChpbnQgcCxpbnQgdil7CgkJU1twK25dPXY7IHArPW47CgkJZm9yKGludCBpPXA7aT4xO2kvPTIpU1tpLzJdPWZuKFNbaV0sU1tpXjFdKTsKCX0KCWxsIEtxcnkoaW50IGwsaW50IHIpewoJCWxsIHJlcz10dDsKCQlmb3IobCs9bixyKz1uO2w8cjtsLz0yLHIvPTIpewoJCQlpZihsJjEpcmVzPWZuKHJlcyxTW2wrK10pOwoJCQlpZihyJjEpcmVzPWZuKHJlcyxTWy0tcl0pOwoJCX1yZXR1cm4gcmVzOwoJfQoJaW5saW5lIGxsIGZuKGxsIGEsbGwgYil7CgkJcmV0dXJuKHR0PT0wKT9hK2I6KHR0PDApP21heChhLGIpOm1pbihhLGIpOwoJfQp9OwppbnQgbWFpbigpewogICAgdmVjdG9yPGxvbmcgbG9uZz4gYSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyfTsKICAgIFNlZ1RyZWUgUzEoYSwtMSk7CiAgICBjb3V0PDxTMS5LcXJ5KDMsNik8PCJcbiI7CiAgICBTMS5VcGR0KDUsLTEpOwogICAgY291dDw8UzEuS3FyeSgzLDYpPDwiXG4iOwp9