#include<bits/stdc++.h>
using namespace std;
typedef long ll;
struct node
{
ll key;
ll size,prio;
node* left,*right;
};
struct treap
{
node* root;
}seg[2000005];
node* create(ll x)
{
node* p=new node;
p->key=x;
p->size=1;
p->prio=rand();
p->left=p->right=NULL;
return p;
}
ll usize(node* root)
{
return root?root->size:0;
}
ll nsize(node* root)
{
return 1+usize(root->left)+usize(root->right);
}
pair<node*,node*> split(node* root,ll x)
{
if(!root)
return make_pair(root,root);
if(root->key<x)
{
pair<node*,node*> p=split(root->right,x);
root->right=p.first;
root->size=nsize(root);
return make_pair(root,p.second);
}
else
{
pair<node*,node*>p=split(root->left,x);
root->left=p.second;
root->size=nsize(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);
l->size=nsize(l);
return l;
}
else
{
r->left=merge(l,r->left);
r->size=nsize(r);
return r;
}
}
node* insert(node* root,ll x)
{
node* tmp=create(x);
pair<node*,node*>p=split(root,x);
return merge(merge(p.first,tmp),p.second);
}
node* erase(node* root,ll x)
{
pair<node*,node*>p1=split(root,x);
pair<node*,node*>p2=split(p1.second,x+1);
if(!p2.first)
return merge(p1.first,p2.second);
if(p2.first->size==1)
{
delete p2.first;
return merge(p1.first,p2.second);
}
return merge(p1.first,merge(p2.first->left,p2.first->right));
}
ll count(node* root,ll k,ll val)
{
if(!root)
return val;
if(root->key==k)
return val+usize(root->left);
if(root->key<k)
return count(root->right,k,val+usize(root->left)+1);
return count(root->left,k,val);
}
void intr(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)
intr(s,mid,2*p+1,indx,val);
else
intr(mid+1,e,2*p+2,indx,val);
seg[p].root=insert(seg[p].root,val);
}
void otr(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)
otr(s,mid,2*p+1,indx,val);
else
otr(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 k)
{
if(s>qh||e<ql)
return 0;
if(s>=ql&&e<=qh)
return usize(seg[p].root)-count(seg[p].root,k,0);
ll mid=(s+e)/2;
ll u=querry(s,mid,2*p+1,ql,qh,k);
ll v=querry(mid+1,e,2*p+2,ql,qh,k);
return v+u;
}
int main()
{
ll q,qt,l,r,i,n;
ll x;
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]);
intr(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--;
otr(0,n-1,0,l,a[l]);
a[l]=x;
intr(0,n-1,0,l,a[l]);
}
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxsOwpzdHJ1Y3Qgbm9kZQp7CiAgICBsbCBrZXk7CiAgICBsbCBzaXplLHByaW87CiAgICBub2RlKiBsZWZ0LCpyaWdodDsKfTsKc3RydWN0IHRyZWFwCnsKICAgIG5vZGUqIHJvb3Q7Cn1zZWdbMjAwMDAwNV07Cm5vZGUqIGNyZWF0ZShsbCB4KQp7CiAgICBub2RlKiBwPW5ldyBub2RlOwogICAgcC0+a2V5PXg7CiAgICBwLT5zaXplPTE7CiAgICBwLT5wcmlvPXJhbmQoKTsKICAgIHAtPmxlZnQ9cC0+cmlnaHQ9TlVMTDsKICAgIHJldHVybiBwOwp9CmxsIHVzaXplKG5vZGUqIHJvb3QpCnsKICAgIHJldHVybiByb290P3Jvb3QtPnNpemU6MDsKfQpsbCBuc2l6ZShub2RlKiByb290KQp7CiAgICByZXR1cm4gMSt1c2l6ZShyb290LT5sZWZ0KSt1c2l6ZShyb290LT5yaWdodCk7Cn0KcGFpcjxub2RlKixub2RlKj4gc3BsaXQobm9kZSogcm9vdCxsbCB4KQp7CiAgICBpZighcm9vdCkKICAgIHJldHVybiBtYWtlX3BhaXIocm9vdCxyb290KTsKICAgIGlmKHJvb3QtPmtleTx4KQogICAgewogICAgICAgIHBhaXI8bm9kZSosbm9kZSo+IHA9c3BsaXQocm9vdC0+cmlnaHQseCk7CiAgICAgICAgcm9vdC0+cmlnaHQ9cC5maXJzdDsKICAgICAgICByb290LT5zaXplPW5zaXplKHJvb3QpOwogICAgICAgIHJldHVybiBtYWtlX3BhaXIocm9vdCxwLnNlY29uZCk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgcGFpcjxub2RlKixub2RlKj5wPXNwbGl0KHJvb3QtPmxlZnQseCk7CiAgICAgICAgcm9vdC0+bGVmdD1wLnNlY29uZDsKICAgICAgICByb290LT5zaXplPW5zaXplKHJvb3QpOwogICAgICAgIHJldHVybiBtYWtlX3BhaXIocC5maXJzdCxyb290KTsKICAgIH0KfQpub2RlKiBtZXJnZShub2RlKiBsLG5vZGUqIHIpCnsKICAgIGlmKCFsfHwhcikKICAgIHJldHVybiBsP2w6cjsKICAgIGlmKGwtPnByaW8+ci0+cHJpbykKICAgIHsKICAgICAgICBsLT5yaWdodD1tZXJnZShsLT5yaWdodCxyKTsKICAgICAgICBsLT5zaXplPW5zaXplKGwpOwogICAgICAgIHJldHVybiBsOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHItPmxlZnQ9bWVyZ2UobCxyLT5sZWZ0KTsKICAgICAgICByLT5zaXplPW5zaXplKHIpOwogICAgICAgIHJldHVybiByOwogICAgfQp9Cm5vZGUqIGluc2VydChub2RlKiByb290LGxsIHgpCnsKICAgIG5vZGUqIHRtcD1jcmVhdGUoeCk7CiAgICBwYWlyPG5vZGUqLG5vZGUqPnA9c3BsaXQocm9vdCx4KTsKICAgIHJldHVybiBtZXJnZShtZXJnZShwLmZpcnN0LHRtcCkscC5zZWNvbmQpOwp9Cm5vZGUqIGVyYXNlKG5vZGUqIHJvb3QsbGwgeCkKewogICAgcGFpcjxub2RlKixub2RlKj5wMT1zcGxpdChyb290LHgpOwogICAgcGFpcjxub2RlKixub2RlKj5wMj1zcGxpdChwMS5zZWNvbmQseCsxKTsKICAgIGlmKCFwMi5maXJzdCkKICAgICAgICByZXR1cm4gbWVyZ2UocDEuZmlyc3QscDIuc2Vjb25kKTsKICAgIGlmKHAyLmZpcnN0LT5zaXplPT0xKQogICAgewogICAgICAgIGRlbGV0ZSBwMi5maXJzdDsKICAgICAgICByZXR1cm4gbWVyZ2UocDEuZmlyc3QscDIuc2Vjb25kKTsKICAgIH0KICAgIHJldHVybiBtZXJnZShwMS5maXJzdCxtZXJnZShwMi5maXJzdC0+bGVmdCxwMi5maXJzdC0+cmlnaHQpKTsKfQpsbCBjb3VudChub2RlKiByb290LGxsIGssbGwgdmFsKQp7CiAgICBpZighcm9vdCkKICAgIHJldHVybiB2YWw7CiAgICBpZihyb290LT5rZXk9PWspCiAgICByZXR1cm4gdmFsK3VzaXplKHJvb3QtPmxlZnQpOwogICAgaWYocm9vdC0+a2V5PGspCiAgICByZXR1cm4gY291bnQocm9vdC0+cmlnaHQsayx2YWwrdXNpemUocm9vdC0+bGVmdCkrMSk7CiAgICByZXR1cm4gY291bnQocm9vdC0+bGVmdCxrLHZhbCk7Cn0Kdm9pZCBpbnRyKGxsIHMsbGwgZSxsbCBwLGxsIGluZHgsbGwgdmFsKQp7CiAgICBpZihzPT1lKQogICAgewogICAgICAgIHNlZ1twXS5yb290PWluc2VydChzZWdbcF0ucm9vdCx2YWwpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgICBsbCBtaWQ9KHMrZSkvMjsKICAgICBpZihpbmR4PD1taWQpCiAgICAgaW50cihzLG1pZCwyKnArMSxpbmR4LHZhbCk7CiAgICAgZWxzZQogICAgIGludHIobWlkKzEsZSwyKnArMixpbmR4LHZhbCk7CiAgICAgc2VnW3BdLnJvb3Q9aW5zZXJ0KHNlZ1twXS5yb290LHZhbCk7Cn0Kdm9pZCBvdHIobGwgcyxsbCBlLGxsIHAsbGwgaW5keCxsbCB2YWwpCnsKICAgIGlmKHM9PWUpCiAgICB7CiAgICAgICAgc2VnW3BdLnJvb3Q9ZXJhc2Uoc2VnW3BdLnJvb3QsdmFsKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAgbGwgbWlkPShzK2UpLzI7CiAgICAgaWYoaW5keDw9bWlkKQogICAgIG90cihzLG1pZCwyKnArMSxpbmR4LHZhbCk7CiAgICAgZWxzZQogICAgIG90cihtaWQrMSxlLDIqcCsyLGluZHgsdmFsKTsKICAgICBzZWdbcF0ucm9vdD1lcmFzZShzZWdbcF0ucm9vdCx2YWwpOwp9CmxsIHF1ZXJyeShsbCBzLGxsIGUsbGwgcCxsbCBxbCxsbCBxaCxsbCBrKQp7CiAgICBpZihzPnFofHxlPHFsKQogICAgcmV0dXJuIDA7CiAgICBpZihzPj1xbCYmZTw9cWgpCiAgICByZXR1cm4gdXNpemUoc2VnW3BdLnJvb3QpLWNvdW50KHNlZ1twXS5yb290LGssMCk7CiAgICBsbCBtaWQ9KHMrZSkvMjsKICAgIGxsIHU9cXVlcnJ5KHMsbWlkLDIqcCsxLHFsLHFoLGspOwogICAgbGwgdj1xdWVycnkobWlkKzEsZSwyKnArMixxbCxxaCxrKTsKICAgIHJldHVybiB2K3U7Cn0KaW50IG1haW4oKQp7CiAgICBsbCBxLHF0LGwscixpLG47CiAgICBsbCB4OwogICAgc2NhbmYoIiVsbGQiLCZuKTsKICAgIGZvcihpPTA7aTwyMDAwMDA1O2krKykKICAgIHNlZ1tpXS5yb290PU5VTEw7CiAgICBsbCBhW25dOwogICAgZm9yKGk9MDtpPG47aSsrKQogICAgewogICAgICAgIHNjYW5mKCIlbGxkIiwmYVtpXSk7CiAgICAgICAgaW50cigwLG4tMSwwLGksYVtpXSk7CiAgICB9CiAgICBzY2FuZigiJWxsZCIsJnEpOwogICAgd2hpbGUocS0tKQogICAgewogICAgICAgIHNjYW5mKCIlbGxkIiwmcXQpOwogICAgICAgIGlmKHF0PT0wKQogICAgICAgIHsKICAgICAgICAgICAgc2NhbmYoIiVsbGQlbGxkJWxsZCIsJmwsJnIsJngpOwogICAgICAgICAgICBsLS07CiAgICAgICAgICAgIHItLTsKICAgICAgICAgICAgbGwgYW5zPXF1ZXJyeSgwLG4tMSwwLGwscix4KTsKICAgICAgICAgICAgcHJpbnRmKCIlbGxkXG4iLGFucyk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHNjYW5mKCIlbGxkJWxsZCIsJmwsJngpOwogICAgICAgICAgICBsLS07CiAgICAgICAgICAgIG90cigwLG4tMSwwLGwsYVtsXSk7CiAgICAgICAgICAgIGFbbF09eDsKICAgICAgICAgICAgaW50cigwLG4tMSwwLGwsYVtsXSk7CiAgICAgICAgfQogICAgfQp9