#include <bits/stdc++.h>
#include "triples.h"
using namespace std;
typedef long long i64;
constexpr int MAXN = 50000;
i64 count_triples(vector<int> H) {
auto check = [&](int i, int j, int k) {
array<int, 3> h = {H[i], H[j], H[k]};
array<int, 3> d = {abs(i - j), abs(i - k), abs(j - k)};
sort(h.begin(), h.end());
sort(d.begin(), d.end());
return h == d;
};
int N = H.size();
i64 ans = 0;
for (auto _: {0, 1}) {
for (int i = 0; i < N; i++) {
int j = i + H[i];
if (j >= N) continue;
int k1 = j - H[j];
if (k1 >= 0 && k1 > i) {
ans += check(i, j, k1);
}
int k2 = i + H[j];
if (k2 < N && k2 < j && k2 != k1) {
ans += check(i, j, k2);
}
}
reverse(H.begin(), H.end());
}
vector<vector<int>> upds(N);
for (int i = 0; i < N; i++) {
upds[i].push_back(-H[i]);
upds[max(i - H[i] + 1, 0)].push_back(H[i]);
}
bitset<MAXN> good_lengths;
vector<int> len_good_count(N);
vector<bitset<MAXN>> by_diff(2 * N);
for (int i = 0; i < N; i++)
by_diff[i - H[i] + N].set(i);
for (int i = 0; i < N; i++) {
for (auto x: upds[i]) {
if (x > 0) len_good_count[x]++;
else len_good_count[-x]--;
good_lengths[abs(x)] = len_good_count[abs(x)] > 0;
}
if (i + H[i] >= N) continue;
ans += (good_lengths & (by_diff[i + H[i] + N] >> i)).count();
}
return ans;
}
vector<int> construct_range(int M, int K) {
vector<int> A(M);
iota(A.begin(), A.end(), 0);
A[0] = 1;
return A;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |