Subtask: You can solve the problem in O(N^2) by brute forcing over every possible pair (i, j) and adding j - i + 1 to the total if every single cow between cows i and j have a height less than \min(h_i, h_j).
Full Solution: Suppose that you fix the cow at position j as the cow with \min(h_i, h_j). Since h is a permutation of 1 \ldots N, it is guaranteed that h will only contain unique cow heights! Since h_j is fixed as the minimum of the two cow heights and h only stores unique cow heights, we can ensure that h_i > h_j. Suppose that we had another cow at position k to the left of the cow at position i that satisfied h_k > h_i. The pair (k, i) would not be a valid pair of cows to throw the frisbee back and forth to, since h_i > h_j and h_j is \min(h_k, h_j).
This indicates that there will be at most one cow at position i for every cow at position j, such that cows at positions i and j can throw the frisbee back forth to each other.
Similarly, this also indicates that there will be at most one at position j, for every cow at the position, i, using similar reasoning.
To find the position i such that the cow at position j can throw to the cow located at position i, we can use a monotonic stack to find the closest index i at which h_i > h_j is satisfied in O(N) time. Similar reasoning holds for fixing cow i as the cow with \min(h_i, h_j). You can find an easier version of a similar problem here or a trickier problem, which I wrote here.
Problem 2 Code:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pl = pair<ll, ll>;
using vl = vector<ll>;
#define forn(i, n) for(ll i = 0; i < n; i++)
#define rofn(i, n) for(ll i = n - 1; i >= 0; i--)
#define f first
#define s second
int main(){
ll n; cin >> n;
vl h(n), l(n), r(n);
stack<pl> st1, st2;
forn(i, n){
cin >> h[i];
l[i] = i, r[i] = i;
}
forn(i, n){
while(!st1.empty()){
if(st1.top().f > h[i]){
l[i] = st1.top().s;
break;
} else {
st1.pop();
}
}
st1.push({h[i], i});
}
rofn(i, n){
while(!st2.empty()){
if(st2.top().f > h[i]){
r[i] = st2.top().s;
break;
} else {
st2.pop();
}
}
st2.push({h[i], i});
}
ll res = 0;
forn(i, n){
if(i != l[i]){
res += (i - l[i] + 1);
}
if(i != r[i]){
res += (r[i] - i + 1);
}
}
cout << res << endl;
}