#include using namespace std; using ll = long long; //RSQ (0-indexed) template struct BIT { private: vector bit; int N; T _sum(int r){ r++; T res = 0; while(r > 0) res += bit[r-1], r -= r & -r; return res; } public: BIT (int n){ N = n; bit.resize(N);} BIT (vector &a) : BIT(a.size()) { for (int i=0; i> N; //転倒数はすでに出てきた数のみに依存する→その時点で転倒数を最小にするのが最適 //転倒数が同じになるなら、先頭の要素と比較する vector P(N+1); for (int i=1; i<=N; i++) cin >> P[i]; BIT bit(N+1); deque que; for (int i=1; i<=N; i++){ S = bit.sum(1, P[i]); //P以下 T = i-1-S; //P以上 if (S < T) que.push_front(P[i]); else if (S > T) que.push_back(P[i]); else{ if (que.empty() || que.front() < P[i]) que.push_back(P[i]); else que.push_front(P[i]); } bit.add(P[i], 1); } ll ans=0; bit.clear(); for (int i=0; i> T; while(T--) solve(); return 0; }