/* RANGE INCREMENT + RANGE MIN/MAX QUERIES + ITERATIVE */
using namespace std;
#include <bits/stdc++.h>
struct SegLzy{
typedef long long ll;
#define _ j*2
#define __ j*2+1
vector<int> S,L; ll n,h,tt;
//pass 't' as {-1,1} for {min,max} segtree
SegLzy(vector<int> ar,int t){
n=ar.size(); h=32-__builtin_clz(n); tt=-1e18*t;
S.assign(2*n,0); L.assign(n,0);
for(int i=0;i<n;i++)S[n+i]=ar[i];
for(int j=n-1;j>0;j--)S[j]=fn(S[_],S[__]);
}
void inline Push(long long p){
for(int i=h,j=p>>i;i>0;--i,j=p>>i)if(L[j]){
S[_] +=L[j];if(_ <n)L[_] +=L[j];
S[__]+=L[j];if(__<n)L[__]+=L[j];
L[j]=0;
}
}
void Updt(int l,int r,int v){
ll s=l+n,e=r-1+n,j;
for(l+=n,r+=n;l<r;l/=2,r/=2){
if(l&1){S[l]+=v;if(l<n)L[l]+=v;l++;}
if(r&1){--r;S[r]+=v;if(r<n)L[r]+=v;}
}
j=s;while((j/=2)>0)S[j]=fn(S[_],S[__])+L[j];
j=e;while((j/=2)>0)S[j]=fn(S[_],S[__])+L[j];
}
long long Kqry(int l,int r){
Push(l+n); Push(r-1+n); 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 x,ll y){
return(tt<0)?max(x,y):min(x,y);
}
};
int main() {
vector<int> a = {1,2,3,4,5,6,7,18,9,10};
SegLzy S(a,1);
cout << "Kqry [0,10) : " << S.Kqry(0,10) << endl;
cout << "Kqry [0,5) : " << S.Kqry(0,5) << endl;
S.Updt(3,7,10);
cout << "Kqry [0,10) : " << S.Kqry(0,10) << endl;
cout << "Kqry [0,5) : " << S.Kqry(0,5) << endl;
return 0;
}
//-----------------------------------------------------------------------------
CgoJCQkJLyogUkFOR0UgSU5DUkVNRU5UICsgUkFOR0UgTUlOL01BWCBRVUVSSUVTICsgSVRFUkFUSVZFICovCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KCnN0cnVjdCBTZWdMenl7Cgl0eXBlZGVmIGxvbmcgbG9uZyBsbDsKICAgICNkZWZpbmUgXyAgaioyCiAgICAjZGVmaW5lIF9fIGoqMisxCgkKICAgIHZlY3RvcjxpbnQ+IFMsTDsgbGwgbixoLHR0OwogICAgLy9wYXNzICd0JyBhcyB7LTEsMX0gZm9yIHttaW4sbWF4fSBzZWd0cmVlCiAgICBTZWdMenkodmVjdG9yPGludD4gYXIsaW50IHQpewogICAgICAgIG49YXIuc2l6ZSgpOyBoPTMyLV9fYnVpbHRpbl9jbHoobik7IHR0PS0xZTE4KnQ7CiAgICAgICAgUy5hc3NpZ24oMipuLDApOyBMLmFzc2lnbihuLDApOwogICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspU1tuK2ldPWFyW2ldOwogICAgICAgIGZvcihpbnQgaj1uLTE7aj4wO2otLSlTW2pdPWZuKFNbX10sU1tfX10pOyAgCiAgICB9Cgl2b2lkIGlubGluZSBQdXNoKGxvbmcgbG9uZyBwKXsKICAgICAgICBmb3IoaW50IGk9aCxqPXA+Pmk7aT4wOy0taSxqPXA+PmkpaWYoTFtqXSl7CiAgICAgICAgICAgIFNbX10gKz1MW2pdO2lmKF8gPG4pTFtfXSArPUxbal07CiAgICAgICAgICAgIFNbX19dKz1MW2pdO2lmKF9fPG4pTFtfX10rPUxbal07CiAgICAgICAgICAgIExbal09MDsKICAgICAgICB9IAogICAgfQogICAgdm9pZCBVcGR0KGludCBsLGludCByLGludCB2KXsKICAgICAgICBsbCBzPWwrbixlPXItMStuLGo7CiAgICAgICAgZm9yKGwrPW4scis9bjtsPHI7bC89MixyLz0yKXsKICAgICAgICAgICAgaWYobCYxKXtTW2xdKz12O2lmKGw8bilMW2xdKz12O2wrKzt9CiAgICAgICAgICAgIGlmKHImMSl7LS1yO1Nbcl0rPXY7aWYocjxuKUxbcl0rPXY7fQogICAgICAgIH0KICAgICAgICBqPXM7d2hpbGUoKGovPTIpPjApU1tqXT1mbihTW19dLFNbX19dKStMW2pdOwogICAgICAgIGo9ZTt3aGlsZSgoai89Mik+MClTW2pdPWZuKFNbX10sU1tfX10pK0xbal07CiAgICB9CiAgICBsb25nIGxvbmcgS3FyeShpbnQgbCxpbnQgcil7CiAgICAgICAgUHVzaChsK24pOyBQdXNoKHItMStuKTsgbGwgcmVzPXR0OwogICAgICAgIGZvcihsKz1uLHIrPW47bDxyO2wvPTIsci89Mil7CiAgICAgICAgICAgIGlmKGwmMSlyZXM9Zm4ocmVzLFNbbCsrXSk7CiAgICAgICAgICAgIGlmKHImMSlyZXM9Zm4ocmVzLFNbLS1yXSk7CiAgICAgICAgfXJldHVybiByZXM7CiAgICB9CiAgICBpbmxpbmUgbGwgZm4obGwgeCxsbCB5KXsKICAgIAlyZXR1cm4odHQ8MCk/bWF4KHgseSk6bWluKHgseSk7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIAogICAgdmVjdG9yPGludD4gYSA9IHsxLDIsMyw0LDUsNiw3LDE4LDksMTB9OwogICAgU2VnTHp5IFMoYSwxKTsKICAgIGNvdXQgPDwgIktxcnkgWzAsMTApIDogIiA8PCBTLktxcnkoMCwxMCkgPDwgZW5kbDsKICAgIGNvdXQgPDwgIktxcnkgWzAsNSkgIDogIiA8PCBTLktxcnkoMCw1KSA8PCBlbmRsOwogICAgUy5VcGR0KDMsNywxMCk7CiAgICBjb3V0IDw8ICJLcXJ5IFswLDEwKSA6ICIgPDwgUy5LcXJ5KDAsMTApIDw8IGVuZGw7CiAgICBjb3V0IDw8ICJLcXJ5IFswLDUpICA6ICIgPDwgUy5LcXJ5KDAsNSkgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ==