1.1歧路?捷径?AC代码。拿去不用给零食!!!

不会玩游戏的咸鱼 2020-12-02 18:59:52

#include<bits/stdc++.h>

typedef long long lld;

const int N = 1e5 + 9, mod = 1e9 + 7; int n, m, a[N], frac[N], tr[N];

inline int lowbit(int x) { return x & (-x); } void insert(int x) { while (x <= n) { ++tr[x]; x += lowbit(x); } } int query(int x) { int s = 0; while (x) { s += tr[x]; x -= lowbit(x); } return s; }

int cantor() { memset(tr, 0, sizeof tr);

int s = 0; for (int i = 0; i < n; ++i) { int t = (n - a[i]) - (i - query(a[i])); insert(a[i]); s = (s + (lld)t * frac[n - 1 - i]) % mod; } return (s + 1) % mod; }

int main() { scanf("%d%d", &n, &m);

frac[0] = 1; for (int i = 1; i < n; ++i) frac[i] = (lld)frac[i - 1] * i % mod;

while (m--) { for (int i = 0; i < n; ++i) scanf("%d", a + i); printf("%d\n", cantor()); } }