#include <bits/stdc++.h>
using namespace std;
using ll = long long;
//sub4:
std::vector<int> construct_range(int M, int K)
{
    return{};
}
/*long long count_triples(vector<int> H)
{
    int n = H.size();
    ll ans = 0;
    for (int k = 0; k < n; k++)
    {
        int c = H[k];
        int i = k - c;
        if (i < 0 || i >= n) continue;
        int a = H[i];
        if (a > c - a) continue;
        int need = c - a;
        int j1   = i + a;
        int j2   = k - a;
        if (i < j1 && j1 < k && H[j1] == need) ans++;
        if (j2 != j1 && i < j2 && j2 < k && H[j2] == need) ans++;
    }
    return ans;
}*/
ll count_triples(vector<int> H)
{
    int n = H.size();
    ll ans = 0;
    //hi = k - i
    for (int i = 0; i < n; i++)
    {
        int k = i + H[i];
        if (k < 0 || k >= n) continue;
        //H[k] == j - i
        int j1 = i + H[k];
        if (j1 > i && j1 < k && j1 < n && H[j1] == k - j1) ans++;
        //H[k] == k - j
        int j2 = k - H[k];
        if (j2 > i && j2 < k && j2 < n && H[j2] == j2 - i) ans++;
    }
    //hk = k - i
    for (int k = 0; k < n; k++)
    {
        int i = k - H[k];
        if (i < 0 || i >= n) continue;
        //H[i] == j - i  => j = i + H[i], check H[j] == k - j
        int j1 = i + H[i];
        if (j1 > i && j1 < k && j1 < n && H[j1] == k - j1) ans++;
        //H[i] == k - j  => j = k - H[i], check H[j] == j - i
        int j2 = k - H[i];
        if (j2 > i && j2 < k && j2 < n && H[j2] == j2 - i) ans++;
    }
    //hj = k - i, hi = j - i, hk = k - j
    for (int i = 0; i < n; i++)
    {
        int j = i + H[i];
        if (j < 0 || j >= n) continue;
        int k = i + H[j];
        if (k < 0 || k >= n) continue;
        if (j < k && H[j] == k - i && H[k] == k - j) ans++;
    }
    //hj = k - i, hi = k - j, hk = j - i
    //H[i] - i = H[j] - j
    for (int i = 0; i < n; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            if (H[i] - i != H[j] - j) continue;
            int k = H[i] + j;
            if (k < 0 || k >= n) continue;
            if (j < k && H[k] == j - i)
            {
                ans++;
            }
        }
    }
    return ans;
}
| # | 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... |