#include #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; typedef vector vi; typedef pair pii; #define MP make_pair #define PB push_back #define inf 1000000007 #define rep(i,n) for(int i = 0; i < (int)(n); ++i) #define all(x) (x).begin(),(x).end() template void Fill(A (&array)[N], const T &val){ std::fill( (T*)array, (T*)(array+N), val ); } template inline bool chmax(T &a, T b){ if(a inline bool chmin(T &a, T b){ if(a>b){ a = b; return true; } return false; } 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 >> q; rep(i,n)cin >> a[i]; BIT bit(n+1),bit2(n+1); rep(i,n){ int k = bit.sum(n) - bit.sum(a[i]); if(i==0){ L[i] = k; }else{ L[i] = k+L[i-1]; } bit.add(a[i],1); } for(int i=n-1;i>=0;i--){ int k = bit2.sum(a[i]-1); R[i] = R[i+1] + k; bit2.add(a[i],1); } rep(zz,q){ int l,r; cin >> l >> r; l--; ll tmp = 0; rep(i,n+1)b[i] = 0; rep(i,n+1)c[i] = 0; for(int i=0;i=0;i--){ b[i] += b[i+1]; } for(int i=r;i