提交时间:2023-01-20 16:55:48

运行 ID: 67879

#include <bits/stdc++.h> using namespace std; int read() { int x = 0, w = 1; char c = 0; while (c < '0' || c > '9') { if (c == '-') w = -1; c = getchar(); } while (c >= '0' && c <= '9') { x = (x << 3) + (x << 1) + (c - '0'); c = getchar(); } return x * w; } const int N = 1e5 + 5, P = 1e9 + 7; typedef long long ll; int n; int a[N]; int kk; vector<int> s[N]; int ss[N]; int main() { scanf("%d%d", &n, &kk); for (int i = 1; i <= n; i++) { scanf("%d", a + i); if (s[a[i]].empty()) ss[i] = 1; else ss[i] = ss[s[a[i]].back()] + 1; s[a[i]].push_back(i); } ll ans = 0; for (int i = 1; i <= n; i++) { for (int j = i + 1; j <= n; j++) { if (a[i] != a[j]) { for (int k = ss[i] + 1; k < s[a[i]].size(); k++) { int sh = k - ss[i]; if (kk == 3) sh = 1ll * sh * (k - ss[i] - 1) % P; int xi = lower_bound(s[a[j]].begin(), s[a[j]].end(), s[a[i]][k]) - s[a[j]].begin(); int xia = s[a[j]].size() - xi; ans = (ans + 1ll * sh * xia % P) % P; } } } } printf("%d\n", ans); return 0; }