#pragma once
/**
* Author: Teetat T.
* Date: 2025-10-31
* Description: Online range inversion count in O(\sqrt{N}).
*/constintN=1e5+5;constintK=320;intn,k;inta[N];pair<int,int>b[N],c[N];intblock[N],l[K],r[K],pre[N],suf[N];lldp[K][K],cnt[K][N];vector<tuple<int,int,int>>qr[N];intst=1,ed=0;structFenwick{intt[N];voidupdate(inti,intv){while(i<N)t[i]+=v,i+=i&-i;}intquery(inti){intres=0;while(i>0)res+=t[i],i-=i&-i;returnres;}}f;llcalc(vector<int>&l,vector<int>&r){llres=0;intp=0;for(autox:l){while(p<r.size()&&x>r[p])p++;res+=p;}returnres;}llquery(intL,intR){intbl=block[L],br=block[R];vector<int>x,y;if(bl==br){for(inti=l[bl];i<=r[bl];i++){auto[val,id]=c[i];if(id<L)x.emplace_back(val);if(L<=id&&id<=R)y.emplace_back(val);}returnpre[R]-(L==l[bl]?0:pre[L-1])-calc(x,y);}llans=suf[L]+dp[bl+1][br-1]+pre[R];for(inti=bl+1;i<br;i++)ans+=cnt[i][r[bl]]-cnt[i][L-1]+cnt[i][R]-cnt[i][l[br]-1];for(inti=l[bl];i<=r[bl];i++){auto[val,id]=c[i];if(L<=id)x.emplace_back(val);}for(inti=l[br];i<=r[br];i++){auto[val,id]=c[i];if(id<=R)y.emplace_back(val);}returnans+calc(x,y);}voidbuild(){for(inti=1;i<=n;i++){b[i]={a[i],i};}k=(n-1)/K+1;for(inti=1;i<=k;i++){l[i]=r[i-1]+1,r[i]=i*K;}r[k]=n;for(inti=1;i<=k;i++){sort(b+l[i],b+r[i]+1);for(intj=l[i];j<=r[i];j++){block[j]=i,c[j]=b[j];}intres=0;for(intj=l[i];j<=r[i];j++){f.update(a[j],+1);res+=f.query(n)-f.query(a[j]);pre[j]=res;}dp[i][i]=res;for(intj=l[i];j<=r[i];j++){suf[j]=res;f.update(a[j],-1);res-=f.query(a[j]-1);}}sort(b+1,b+n+1);for(inti=1;i<=k;i++){for(intj=1,p=l[i];j<=n;j++){auto[val,id]=b[j];while(p<=r[i]&&val>c[p].first)p++;if(id<l[i])cnt[i][id]=p-l[i];}for(intj=1,p=l[i];j<=n;j++){auto[val,id]=b[j];while(p<=r[i]&&val>=c[p].first)p++;if(id>r[i])cnt[i][id]=r[i]-p+1;}for(intj=1;j<=n;j++)cnt[i][j]+=cnt[i][j-1];}for(intsz=2;sz<=k;sz++){for(inti=1,j=sz;j<=k;i++,j++){dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1]+cnt[j][r[i]]-cnt[j][l[i]-1];}}}
#line 2 "src/miscellaneous/range-inversion.cpp"
/**
* Author: Teetat T.
* Date: 2025-10-31
* Description: Online range inversion count in O(\sqrt{N}).
*/constintN=1e5+5;constintK=320;intn,k;inta[N];pair<int,int>b[N],c[N];intblock[N],l[K],r[K],pre[N],suf[N];lldp[K][K],cnt[K][N];vector<tuple<int,int,int>>qr[N];intst=1,ed=0;structFenwick{intt[N];voidupdate(inti,intv){while(i<N)t[i]+=v,i+=i&-i;}intquery(inti){intres=0;while(i>0)res+=t[i],i-=i&-i;returnres;}}f;llcalc(vector<int>&l,vector<int>&r){llres=0;intp=0;for(autox:l){while(p<r.size()&&x>r[p])p++;res+=p;}returnres;}llquery(intL,intR){intbl=block[L],br=block[R];vector<int>x,y;if(bl==br){for(inti=l[bl];i<=r[bl];i++){auto[val,id]=c[i];if(id<L)x.emplace_back(val);if(L<=id&&id<=R)y.emplace_back(val);}returnpre[R]-(L==l[bl]?0:pre[L-1])-calc(x,y);}llans=suf[L]+dp[bl+1][br-1]+pre[R];for(inti=bl+1;i<br;i++)ans+=cnt[i][r[bl]]-cnt[i][L-1]+cnt[i][R]-cnt[i][l[br]-1];for(inti=l[bl];i<=r[bl];i++){auto[val,id]=c[i];if(L<=id)x.emplace_back(val);}for(inti=l[br];i<=r[br];i++){auto[val,id]=c[i];if(id<=R)y.emplace_back(val);}returnans+calc(x,y);}voidbuild(){for(inti=1;i<=n;i++){b[i]={a[i],i};}k=(n-1)/K+1;for(inti=1;i<=k;i++){l[i]=r[i-1]+1,r[i]=i*K;}r[k]=n;for(inti=1;i<=k;i++){sort(b+l[i],b+r[i]+1);for(intj=l[i];j<=r[i];j++){block[j]=i,c[j]=b[j];}intres=0;for(intj=l[i];j<=r[i];j++){f.update(a[j],+1);res+=f.query(n)-f.query(a[j]);pre[j]=res;}dp[i][i]=res;for(intj=l[i];j<=r[i];j++){suf[j]=res;f.update(a[j],-1);res-=f.query(a[j]-1);}}sort(b+1,b+n+1);for(inti=1;i<=k;i++){for(intj=1,p=l[i];j<=n;j++){auto[val,id]=b[j];while(p<=r[i]&&val>c[p].first)p++;if(id<l[i])cnt[i][id]=p-l[i];}for(intj=1,p=l[i];j<=n;j++){auto[val,id]=b[j];while(p<=r[i]&&val>=c[p].first)p++;if(id>r[i])cnt[i][id]=r[i]-p+1;}for(intj=1;j<=n;j++)cnt[i][j]+=cnt[i][j-1];}for(intsz=2;sz<=k;sz++){for(inti=1,j=sz;j<=k;i++,j++){dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1]+cnt[j][r[i]]-cnt[j][l[i]-1];}}}