#include "triples.h"
#include <bits/stdc++.h>
using namespace std;
long long count_triples(vector<int> H){
int n = (int)H.size();
vector<vector<int>> L(n), R(n);
for(int i=0;i<n;i++){
int a = H[i];
if(i + a < n) L[i + a].push_back(a);
if(i - a >= 0) R[i - a].push_back(a);
}
long long ans = 0;
for(int i=0;i<n;i++){
int d = H[i];
int k = i + d;
if(k >= n) continue;
int t = H[k];
if(1 <= t && t <= d-1){
int j1 = i + t;
if(j1 > i && j1 < k && H[j1] == d - t) ans++;
int j2 = i + (d - t);
if(j2 > i && j2 < k && j2 != j1 && H[j2] == t) ans++;
}
}
for(int k=0;k<n;k++){
int d = H[k];
int i = k - d;
if(i < 0) continue;
int t = H[i];
if(1 <= t && t <= d-1){
int j1 = i + t;
if(j1 > i && j1 < k && H[j1] == d - t) ans++;
int j2 = i + (d - t);
if(j2 > i && j2 < k && j2 != j1 && H[j2] == t) ans++;
}
}
for(int j=0;j<n;j++){
int d = H[j];
auto &A = L[j];
auto &B = R[j];
if(A.empty() || B.empty()) continue;
if((int)A.size() <= (int)B.size()){
unordered_set<int> sb;
sb.reserve(B.size() * 2 + 1);
for(int x: B) sb.insert(x);
for(int a: A){
int b = d - a;
if(b >= 1 && b <= n-1 && sb.find(b) != sb.end()) ans++;
}
}else{
unordered_set<int> sa;
sa.reserve(A.size() * 2 + 1);
for(int x: A) sa.insert(x);
for(int b: B){
int a = d - b;
if(a >= 1 && a <= n-1 && sa.find(a) != sa.end()) ans++;
}
}
}
return ans;
}
vector<int> construct_range(int M, int K){
int N = max(3, min(M, 200000));
vector<int> H(N, 1);
if(N >= 3) H[2] = 2;
return H;
}
| # | 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... |