#pragma GCC optimize ("O3")
#include "triples.h"
using namespace std;
#include <bits/stdc++.h>
typedef long long ll;
#define rep(i,a,b) for(ll i = a; i < b; i++)
long long count_triples(std::vector<int> arr) {
int n = arr.size();
set<tuple<int,int,int>> ans;
auto check = [&](int i, int j, int k) {
int ind[] = {i, j, k};
int a[] = {min(j-i, k-j), max(j-i, k-j), abs(k-i)};
int b[] = {arr[i], arr[j], arr[k]};
sort(b, b+3);
if (a[0] == b[0] && a[1] == b[1] && a[2] == b[2]) {
ans.insert({ind[0], ind[1], ind[2]});
}
};
rep(i,0,n) {
for (auto j : {i + arr[i], i - arr[i]}) {
if (j < 0 || j > n-1) continue;
for (auto k : {i + arr[j], i - arr[j], j + arr[j], j - arr[j]}) {
if (k < 0 || k > n-1) continue;
int ind[] = {i, j, k};
sort(ind, ind+3);
check(ind[0], ind[1], ind[2]);
}
}
}
vector<vector<int>> forw(2*n), back(2*n);
vector<int> before(n,0), after(n,0);
rep(i,0,n) {
int x = arr[i]-i+n;
before[i] = forw[x].size();
forw[x].push_back(i);
}
for (int i = n-1; i>= 0; i--) {
int x = arr[i]+i;
after[i] = back[x].size();
back[x].push_back(i);
}
rep(b,0,n) {
if (before[b] < after[b]) {
rep(i,0,before[b]) {
int a = forw[arr[b]-b+n][i];
int c = a + arr[b];
if (c < n) check(a, b, c);
}
}
else {
rep(i,0,after[b]) {
int c = back[arr[b]+b][i];
int a = c - arr[b];
if (a > 0) check(a, b, c);
}
}
}
return ans.size();
}
std::vector<int> construct_range(int M, int K) {
vector<int> res(M);
return res;
}
Compilation message (stderr)
triples.cpp: In function 'long long int count_triples(std::vector<int>)':
triples.cpp:31:30: warning: narrowing conversion of 'i' from 'll' {aka 'long long int'} to 'int' [-Wnarrowing]
31 | int ind[] = {i, j, k};
| ^
triples.cpp:31:33: warning: narrowing conversion of 'j' from 'long long int' to 'int' [-Wnarrowing]
31 | int ind[] = {i, j, k};
| ^
triples.cpp:31:36: warning: narrowing conversion of 'k' from 'long long int' to 'int' [-Wnarrowing]
31 | int ind[] = {i, j, k};
| ^
# | 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... |