#include "triples.h"
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
using namespace std;
typedef pair<int,int> pii;
const int MAXN = 5e5+10;
const int SQRT = 500;
void chmx(auto &a, auto b){ a = max(a,b); }
void chmn(auto &a, auto b){ a = min(a,b); }
int n, h[MAXN];
ll ans;
void cek(int i, int j, int k){
if(1<=i && i<j && j<k && k<=n){
// if(ty==1 && h[i] <= max(h[j], h[k])) return;
int mxa = -1, mxb = -1, mna = MAXN, mnb = MAXN, tota=0, totb=0;
chmx(mxa, h[i]); chmn(mna, h[i]); tota += h[i];
chmx(mxa, h[j]); chmn(mna, h[j]); tota += h[j];
chmx(mxa, h[k]); chmn(mna, h[k]); tota += h[k];
chmx(mxb, j-i); chmn(mnb, j-i); totb += j-i;
chmx(mxb, k-j); chmn(mnb, k-j); totb += k-j;
chmx(mxb, k-i); chmn(mnb, k-i); totb += k-i;
if(mxa==mxb && mna==mnb && tota==totb) ans++;
}
}
vector<int> vec[MAXN], tag[MAXN];
long long count_triples(std::vector<int> H) {
n = H.size();
for(int i=1; i<=n; i++) h[i] = H[i-1];
for(int i=1; i<=n; i++){ // i max
int k = h[i]+i;
cek(i, i+h[k], k);
if(i+h[k] != k-h[k]) cek(i, k-h[k], k);
}
for(int k=1; k<=n; k++){ // k max
int i = k-h[k];
cek(i, i+h[i], k);
if(i+h[i] != k-h[i]) cek(i, k-h[i], k);
}
for(int i=1; i<=n; i++){ // j max
int j = i+h[i];
if(h[i] != i+h[j]-j) cek(i, j, i+h[j]);
}
for(int i=1; i<=n; i++)
vec[h[i]-i + n].pb(i);
for(int idx=0; idx<=2*n; idx++){ // j max
if(vec[idx].size() < SQRT){
for(int a=0; a<vec[idx].size(); a++){
for(int b=a+1; b<vec[idx].size(); b++){
int i = vec[idx][a], j = vec[idx][b];
cek(i, j, h[j]+i);
}
}
} else {
for(auto i : vec[idx])
tag[h[i]+i].pb(i);
for(int k=1; k<=n; k++){
for(auto j : tag[h[k]+k]){
cek(k-h[j], j, k);
}
}
for(auto i : vec[idx])
tag[h[i]+i].clear();
}
}
return ans;
}
std::vector<int> construct_range(int M, int K) {
vector<int> vec; vec.pb(0);
for(int i=0; i<M-1; i++) vec.pb(i);
return vec;
}
# | 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... |