#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node
{
ll key,prio,size;
node* left,*right;
};
struct vtx
{
node* root;
}seg[2000005];
node* create(ll x)
{
node* p=new node;
p->key=x;
p->prio=rand();
p->size=1;
p->left=p->right=NULL;
return p;
}
ll nsize(node* root)
{
if(root)
return root->size;
return 0;
}
void usize(node* root)
{
root->size=1+nsize(root->left)+nsize(root->right);
}
pair<node*,node*> split(node* root,ll x)
{
if(root==NULL)
return make_pair(root,root);
if(root->key<x)
{
pair<node*,node*>p=split(root->right,x);
root->right=p.first;
usize(root);
return make_pair(root,p.second);
}
pair<node*,node*>p=split(root->left,x);
root->left=p.second;
usize(root);
return make_pair(p.first,root);
}
node* merge(node* l,node* r)
{
if(!l||!r)
return l?l:r;
if(l->prio<r->prio)
{
l->right=merge(l->right,r);
usize(l);
return l;
}
r->left=merge(l,r->left);
usize(r);
return r;
}
node* insert(node* root,ll x)
{
node* tmp=create(x);
pair<node*,node*>p=split(root,x);
node* p1=merge(p.first,tmp);
node* p2=merge(p1,p.second);
return p2;
}
node* erase(node* root,ll x)
{
if(!root)
return root;
pair<node*,node*>p1=split(root,x);
pair<node*,node*>p2=split(p1.second,x+1);
if(p2.first&&p2.first->size==1&&p2.first->key==x)
delete p2.first;
node* p=merge(p1.first,p2.second);
return p;
}
pair<node*,ll> count(node* root,ll k)
{
pair<node*,node*>p=split(root,k);
ll u=nsize(p.second);
node* p1=merge(p.first,p.second);
return make_pair(p1,u);
}
void build(ll s,ll e,ll p,ll indx,ll val)
{
if(s==e)
{
seg[p].root=insert(seg[p].root,val);
return;
}
ll mid=(s+e)/2;
if(indx<=mid)
{
build(s,mid,2*p+1,indx,val);
seg[p].root=insert(seg[p].root,val);
}
else
{
build(mid+1,e,2*p+2,indx,val);
seg[p].root=insert(seg[p].root,val);
}
}
void update1(ll s,ll e,ll p,ll indx,ll val)
{
if(s==e)
{
seg[p].root=erase(seg[p].root,val);
return;
}
ll mid=(s+e)/2;
if(indx<=mid)
{
update1(s,mid,2*p+1,indx,val);
seg[p].root=erase(seg[p].root,val);
}
else
{
update1(mid+1,e,2*p+2,indx,val);
seg[p].root=erase(seg[p].root,val);
}
}
ll querry(ll s,ll e,ll p,ll ql,ll qh,ll val)
{
if(s>qh||e<ql)
return 0;
if(s>=ql&&e<=qh)
{
pair<node*,ll>p1=count(seg[p].root,val);
seg[p].root=p1.first;
return p1.second;
}
ll mid=(s+e)/2;
ll u=querry(s,mid,2*p+1,ql,qh,val);
ll v=querry(mid+1,e,2*p+2,ql,qh,val);
return u+v;
}
int main()
{
ll n,i,l,r,x,q,qt;
scanf("%lld",&n);
for(i=0;i<2000005;i++)
seg[i].root=NULL;
ll a[n];
for(i=0;i<n;i++)
{
scanf("%lld",&a[i]);
build(0,n-1,0,i,a[i]);
}
scanf("%lld",&q);
while(q--)
{
scanf("%lld",&qt);
if(qt==0)
{
scanf("%lld%lld%lld",&l,&r,&x);
l--;
r--;
ll ans=querry(0,n-1,0,l,r,x);
printf("%lld\n",ans);
}
else
{
scanf("%lld%lld",&l,&x);
l--;
update1(0,n-1,0,l,a[l]);
a[l]=x;
build(0,n-1,0,l,a[l]);
}
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnN0cnVjdCBub2RlCnsKICAgIGxsIGtleSxwcmlvLHNpemU7CiAgICBub2RlKiBsZWZ0LCpyaWdodDsKfTsKc3RydWN0IHZ0eAp7CiAgICBub2RlKiByb290Owp9c2VnWzIwMDAwMDVdOwpub2RlKiBjcmVhdGUobGwgeCkKewogICAgbm9kZSogcD1uZXcgbm9kZTsKICAgIHAtPmtleT14OwogICAgcC0+cHJpbz1yYW5kKCk7CiAgICBwLT5zaXplPTE7CiAgICBwLT5sZWZ0PXAtPnJpZ2h0PU5VTEw7CiAgICByZXR1cm4gcDsKfQpsbCBuc2l6ZShub2RlKiByb290KQp7CiAgICBpZihyb290KQogICAgcmV0dXJuIHJvb3QtPnNpemU7CiAgICByZXR1cm4gMDsKfQp2b2lkIHVzaXplKG5vZGUqIHJvb3QpCnsKICAgICByb290LT5zaXplPTErbnNpemUocm9vdC0+bGVmdCkrbnNpemUocm9vdC0+cmlnaHQpOwp9CnBhaXI8bm9kZSosbm9kZSo+IHNwbGl0KG5vZGUqIHJvb3QsbGwgeCkKewogICAgaWYocm9vdD09TlVMTCkKICAgIHJldHVybiBtYWtlX3BhaXIocm9vdCxyb290KTsKICAgIGlmKHJvb3QtPmtleTx4KQogICAgewogICAgICAgIHBhaXI8bm9kZSosbm9kZSo+cD1zcGxpdChyb290LT5yaWdodCx4KTsKICAgICAgICByb290LT5yaWdodD1wLmZpcnN0OwogICAgICAgIHVzaXplKHJvb3QpOwogICAgICAgIHJldHVybiBtYWtlX3BhaXIocm9vdCxwLnNlY29uZCk7CiAgICB9CiAgICBwYWlyPG5vZGUqLG5vZGUqPnA9c3BsaXQocm9vdC0+bGVmdCx4KTsKICAgIHJvb3QtPmxlZnQ9cC5zZWNvbmQ7CiAgICB1c2l6ZShyb290KTsKICAgIHJldHVybiBtYWtlX3BhaXIocC5maXJzdCxyb290KTsKfQpub2RlKiBtZXJnZShub2RlKiBsLG5vZGUqIHIpCnsKICAgIGlmKCFsfHwhcikKICAgIHJldHVybiBsP2w6cjsKICAgIGlmKGwtPnByaW88ci0+cHJpbykKICAgIHsKICAgICAgICBsLT5yaWdodD1tZXJnZShsLT5yaWdodCxyKTsKICAgICAgICB1c2l6ZShsKTsKICAgICAgICByZXR1cm4gbDsKICAgIH0KICAgIHItPmxlZnQ9bWVyZ2UobCxyLT5sZWZ0KTsKICAgIHVzaXplKHIpOwogICAgcmV0dXJuIHI7Cn0Kbm9kZSogaW5zZXJ0KG5vZGUqIHJvb3QsbGwgeCkKewogICAgbm9kZSogdG1wPWNyZWF0ZSh4KTsKICAgIHBhaXI8bm9kZSosbm9kZSo+cD1zcGxpdChyb290LHgpOwogICAgbm9kZSogcDE9bWVyZ2UocC5maXJzdCx0bXApOwogICAgbm9kZSogcDI9bWVyZ2UocDEscC5zZWNvbmQpOwogICAgcmV0dXJuIHAyOwp9Cm5vZGUqIGVyYXNlKG5vZGUqIHJvb3QsbGwgeCkKewogICAgaWYoIXJvb3QpCiAgICByZXR1cm4gcm9vdDsKICAgIHBhaXI8bm9kZSosbm9kZSo+cDE9c3BsaXQocm9vdCx4KTsKICAgIHBhaXI8bm9kZSosbm9kZSo+cDI9c3BsaXQocDEuc2Vjb25kLHgrMSk7CiAgICBpZihwMi5maXJzdCYmcDIuZmlyc3QtPnNpemU9PTEmJnAyLmZpcnN0LT5rZXk9PXgpCiAgICBkZWxldGUgcDIuZmlyc3Q7CiAgICBub2RlKiBwPW1lcmdlKHAxLmZpcnN0LHAyLnNlY29uZCk7CiAgICByZXR1cm4gcDsKfQpwYWlyPG5vZGUqLGxsPiBjb3VudChub2RlKiByb290LGxsIGspCnsKICAgIHBhaXI8bm9kZSosbm9kZSo+cD1zcGxpdChyb290LGspOwogICAgbGwgdT1uc2l6ZShwLnNlY29uZCk7CiAgICBub2RlKiBwMT1tZXJnZShwLmZpcnN0LHAuc2Vjb25kKTsKICAgIHJldHVybiBtYWtlX3BhaXIocDEsdSk7Cn0Kdm9pZCBidWlsZChsbCBzLGxsIGUsbGwgcCxsbCBpbmR4LGxsIHZhbCkKewogICAgaWYocz09ZSkKICAgIHsKICAgICAgICBzZWdbcF0ucm9vdD1pbnNlcnQoc2VnW3BdLnJvb3QsdmFsKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsbCBtaWQ9KHMrZSkvMjsKICAgIGlmKGluZHg8PW1pZCkKICAgIHsKICAgICAgICBidWlsZChzLG1pZCwyKnArMSxpbmR4LHZhbCk7CiAgICAgICAgc2VnW3BdLnJvb3Q9aW5zZXJ0KHNlZ1twXS5yb290LHZhbCk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgYnVpbGQobWlkKzEsZSwyKnArMixpbmR4LHZhbCk7CiAgICAgICAgc2VnW3BdLnJvb3Q9aW5zZXJ0KHNlZ1twXS5yb290LHZhbCk7CiAgICB9Cn0Kdm9pZCB1cGRhdGUxKGxsIHMsbGwgZSxsbCBwLGxsIGluZHgsbGwgdmFsKQp7CiAgICBpZihzPT1lKQogICAgewogICAgICAgIHNlZ1twXS5yb290PWVyYXNlKHNlZ1twXS5yb290LHZhbCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbGwgbWlkPShzK2UpLzI7CiAgICBpZihpbmR4PD1taWQpCiAgICB7CiAgICAgICAgdXBkYXRlMShzLG1pZCwyKnArMSxpbmR4LHZhbCk7CiAgICAgICAgc2VnW3BdLnJvb3Q9ZXJhc2Uoc2VnW3BdLnJvb3QsdmFsKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICB1cGRhdGUxKG1pZCsxLGUsMipwKzIsaW5keCx2YWwpOwogICAgICAgIHNlZ1twXS5yb290PWVyYXNlKHNlZ1twXS5yb290LHZhbCk7CiAgICB9Cn0KbGwgcXVlcnJ5KGxsIHMsbGwgZSxsbCBwLGxsIHFsLGxsIHFoLGxsIHZhbCkKewogICAgaWYocz5xaHx8ZTxxbCkKICAgIHJldHVybiAwOwogICAgaWYocz49cWwmJmU8PXFoKQogICAgewogICAgICAgIHBhaXI8bm9kZSosbGw+cDE9Y291bnQoc2VnW3BdLnJvb3QsdmFsKTsKICAgICAgICBzZWdbcF0ucm9vdD1wMS5maXJzdDsKICAgICAgICByZXR1cm4gcDEuc2Vjb25kOwogICAgfQogICAgbGwgbWlkPShzK2UpLzI7CiAgICBsbCB1PXF1ZXJyeShzLG1pZCwyKnArMSxxbCxxaCx2YWwpOwogICAgbGwgdj1xdWVycnkobWlkKzEsZSwyKnArMixxbCxxaCx2YWwpOwogICAgcmV0dXJuIHUrdjsKfQppbnQgbWFpbigpCnsKICAgIGxsIG4saSxsLHIseCxxLHF0OwogICAgc2NhbmYoIiVsbGQiLCZuKTsKICAgIGZvcihpPTA7aTwyMDAwMDA1O2krKykKICAgIHNlZ1tpXS5yb290PU5VTEw7CiAgICBsbCBhW25dOwogICAgZm9yKGk9MDtpPG47aSsrKQogICAgewogICAgICAgIHNjYW5mKCIlbGxkIiwmYVtpXSk7CiAgICAgICAgYnVpbGQoMCxuLTEsMCxpLGFbaV0pOwogICAgfQogICAgc2NhbmYoIiVsbGQiLCZxKTsKICAgIHdoaWxlKHEtLSkKICAgIHsKICAgICAgICBzY2FuZigiJWxsZCIsJnF0KTsKICAgICAgICBpZihxdD09MCkKICAgICAgICB7CiAgICAgICAgICAgIHNjYW5mKCIlbGxkJWxsZCVsbGQiLCZsLCZyLCZ4KTsKICAgICAgICAgICAgbC0tOwogICAgICAgICAgICByLS07CiAgICAgICAgICAgIGxsIGFucz1xdWVycnkoMCxuLTEsMCxsLHIseCk7CiAgICAgICAgICAgIHByaW50ZigiJWxsZFxuIixhbnMpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBzY2FuZigiJWxsZCVsbGQiLCZsLCZ4KTsKICAgICAgICAgICAgbC0tOwogICAgICAgICAgICB1cGRhdGUxKDAsbi0xLDAsbCxhW2xdKTsKICAgICAgICAgICAgYVtsXT14OwogICAgICAgICAgICBidWlsZCgwLG4tMSwwLGwsYVtsXSk7CiAgICAgICAgfQogICAgfQp9