#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define MP make_pair #define PB push_back #define inf 1000000007 #define mod 1000000007 #define rep(i,n) for(int i = 0; i < (int)(n); ++i) #define int long long template class BIT { private: int n; vector bit; public: // 0_indexed で i 番目の要素に x を加える void add(int i, T x){ i++; while(i < n){ bit[i] += x, i += i & -i; } } // 0_indexed で [0,i] の要素の和(両閉区間!!) T sum(int i){ i++; T s = 0; while(i > 0){ s += bit[i], i -= i & -i; } return s; } BIT(){} //初期値がすべて0の場合 BIT(int sz) : n(sz+1), bit(n, 0){} BIT(vector& v) : n((int)v.size()+1), bit(n, 0){ for(int i = 0; i < n-1; i++){ add(i,v[i]); } } void print(){ for(int i = 0; i < n-1; i++){ cout<> n; vector a(n); vector c(100001); vector > pp(100001); rep(i,n){ cin >> a[i]; c[a[i]]++; pp[a[i]].push_back(i); } vector > p; rep(i,100001){ if(c[i]!=0){ p.push_back(MP(c[i],i)); } } ll sm = 0; sort(p.rbegin(),p.rend()); for(int z=0;z d(n+1); rep(i,n){ if(a[i]==k){ d[i+1] = 1; }else{ d[i+1] = -1; } } int g = -1; for(int i=1;i bit(mx+1); for(int i=0;i<=n;i++){ sm += bit.sum(d[i]-1); bit.add(d[i],1); } }else{ vector d = pp[k]; int m = d.size(); for(int i=0;i