// hibit さんの方針を高速化したもの、O(N^2logN) // 実装上は O(N(NlogA + A)) (A=max(A)) だが、 // 座圧すれば Ai≦10^9 とかでも解けて O(N^2logN) になるはず #include using namespace std; using ll = long long; #include using namespace atcoder; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(15); int N; cin >> N; vector A(N); for (int i = 0; i < N; i++) { cin >> A[i]; } int MAX_A = *max_element(A.begin(), A.end()) + 1; ll ans = 0; for (int i1 = 0; i1 < N - 3; i1++) { int a1 = A[i1]; // (a2, a4) のペア数、a2 の値を添え字として使用 fenwick_tree fw(MAX_A + 1); // a2, a4 の個数管理 vector cnt_2(MAX_A + 1); vector cnt_4(MAX_A + 1); for (int i4 = i1 + 3; i4 < N; i4++) { cnt_4[A[i4]]++; } for (int i3 = i1 + 2; i3 < N - 1; i3++) { int a2 = A[i3 - 1]; int a3 = A[i3]; int a4 = A[i3 + 1]; // a3 直前の要素を a2 として追加 fw.add(a2, cnt_4[a2 + 1]); cnt_2[a2]++; // (a1, a3) と組み合わせられる (a2, a4) の組の個数を加算 if (a1 + 10 == a3) { ans += fw.sum(a3 + 1, MAX_A + 1); } // a3 直後の要素を a4 として削除 fw.add(a4 - 1, -cnt_2[a4 - 1]); cnt_4[a4]--; } } cout << ans << '\n'; return 0; }