➤ Problem Link : COURAGE
👉 Hint : edit please
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define mp make_pair
#define mx pow(10,9)+1
pair<ll,ll> st[400002];
ll arr[200001];
void build(ll v, ll s, ll e)
{
if(s==e)
{
st[v]=mp(arr[s],arr[s]);
return;
}
ll mid=(s+e)/2;
build(2*v,s,mid);
build(2*v+1,mid+1,e);
st[v]=mp(min(st[2*v].first,st[2*v+1].first),st[2*v].second+st[2*v+1].second);
}
void update(ll v, ll s, ll e, ll ind, ll x)
{
if(s==e)
{
st[v].second+=x;
st[v].first+=x;
return;
}
ll mid=(s+e)/2;
if(ind>=s && ind<=mid)
update(2*v,s,mid,ind,x);
else
update(2*v+1,mid+1,e,ind,x);
st[v]=mp(min(st[2*v].first,st[2*v+1].first),st[2*v].second+st[2*v+1].second);
}
pair<ll,ll> query(ll v, ll s, ll e, ll l, ll r)
{
if(s>r || e< l)
return mp(mx,0);
if(s>=l && e<=r)
return st[v];
ll mid=(s+e)/2;
pair<ll,ll> p = query(2*v,s,mid,l,r);
pair<ll,ll> q= query(2*v+1,mid+1,e,l,r);
return mp(min(p.first,q.first),p.second+q.second);
}
int main()
{
ll p,n;
cin>>n;
for(ll i=0;i<n;i++)
cin>>arr[i];
cin>>p;
build(1,0,n-1);
string s;
ll x,y;
while(p--)
{
cin>>s>>x>>y;
if(s=="COUNT")
{
pair<ll,ll> p=query(1,0,n-1,x,y);
cout<<p.second-p.first<<"\n";
}
else if(s=="GROW")
update(1,0,n-1,y,x);
else
update(1,0,n-1,y,x*-1);
}
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
