#include "triples.h"
#include<bits/stdc++.h>
using namespace std;
#define maxn 200005
#define ll long long
#define pi pair<int,int>
#define pii pair<pi,int>
#define all(x) x.begin(),x.end()
int n;
int h[maxn];
vector<int>pos[maxn];
int numTriplet;
ll triplet[100*maxn];
ll mask(int i,int j,int k)
{
return 1LL*i*(n+1)*(n+1)+1LL*j*(n+1)+k;
}
bool isValid(int i,int j,int k)
{
if(1<=i&&i<j&&j<k&&k<=n)
{
vector<int>A={h[i],h[j],h[k]};
vector<int>B={j-i,k-j,k-i};
sort(all(A));
sort(all(B));
if(A==B)
{
triplet[++numTriplet]=mask(i,j,k);
return 1;
}
}
return 0;
}
void brute()
{
int res=0;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
for(int k=j+1;k<=n;k++)
{
res+=isValid(i,j,k);
}
}
}
cout<<"Brute:"<<res<<'\n';
}
ll count_triples(vector<int> H)
{
n=H.size();
for(int i=0;i<n;i++)h[i+1]=H[i];
//brute();
numTriplet=0;
for(int j=1;j<=n;j++)
{
if(j-h[j]>=1)isValid(j-h[j],j,j-h[j]+h[j-h[j]]);
if(j+h[j]<=n)isValid(j-h[j+h[j]],j,j+h[j]);
if(j+h[j]<=n)isValid(j+h[j]-h[j+h[j]],j,j+h[j]);
if(j-h[j]>=1)isValid(j-h[j],j,j+h[j-h[j]]);
}
for(int i=1;i<=n;i++)
{
if(i+h[i]<=n)isValid(i,i+h[i],i+h[i+h[i]]);
}
for(int k=1;k<=n;k++)
{
int mid=k-h[k];
if(1<=mid)pos[mid].push_back(k);
}
for(int i=1;i<=n;i++)
{
int mid=i+h[i];
if(mid<=n)
{
for(int k:pos[mid])
{
isValid(i,i+h[k],k);
}
}
}
sort(triplet+1,triplet+numTriplet+1);
numTriplet=unique(triplet+1,triplet+numTriplet+1)-triplet-1;
return numTriplet;
}
vector<int> construct_range(int M, int K)
{
return {1, 1, 1};
}
# | 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... |