/*
* <|--- <<_||_>> ---|>
* <--- >>-\\-<< --->
* <|--- <<_||_>> ---|>
*/
// problem 1 --> Balanced Intervals
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>, rb_tree_tag,
tree_order_statistics_node_update> ordered_set;
#define el '\n'
#define int long long
const int mod = 1000000000 + 7;
void solve() {
int n;
cin >> n;
vector<int> a(n + 1);
vector<vector<int> > pos(n + 1);
set<int> bad;
bad.insert(0);
bad.insert(n + 1);
for (int i = 1; i <= n; ++i) {
cin >> a[i];
if (a[i] > n) {
bad.insert(i);
} else {
pos[a[i]].push_back(i);
}
}
int total_balanced = 0;
for (int v = n; v >= 1; --v) {
int k = pos[v].size();
for (int j = 0; j <= k - v; ++j) {
int L_pos = pos[v][j];
int R_pos = pos[v][j + v - 1];
auto it = bad.upper_bound(L_pos);
int B_next = *it;
if (B_next < R_pos) {
continue;
}
int B_L = *prev(it);
int B_R = B_next;
int prev_v_pos = (j > 0) ? pos[v][j - 1] : 0;
int next_v_pos = (j + v < k) ? pos[v][j + v] : n + 1;
int limit_L = max(B_L, prev_v_pos);
int limit_R = min(B_R, next_v_pos);
total_balanced += 1LL * (L_pos - limit_L) * (limit_R - R_pos);
}
for (int p: pos[v]) {
bad.insert(p);
}
}
cout << total_balanced << el;
}
int32_t main() {
ios_base::sync_with_stdio(false);
cout.tie(nullptr), cin.tie(nullptr);
int tt = 1;
//cin >> tt;
while (tt--) {
solve();
}
return 0;
}
LyoKKiAgPHwtLS0gPDxffHxfPj4gLS0tfD4KKiAgPC0tLSAgPj4tXFwtPDwgIC0tLT4KKiAgPHwtLS0gPDxffHxfPj4gLS0tfD4KKi8KLy8gcHJvYmxlbSAxIC0tPiBCYWxhbmNlZCBJbnRlcnZhbHMKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKCnR5cGVkZWYgdHJlZTxpbnQsIG51bGxfdHlwZSwgbGVzczxpbnQ+LCByYl90cmVlX3RhZywKICAgIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4gb3JkZXJlZF9zZXQ7CgojZGVmaW5lIGVsICAgICAnXG4nCiNkZWZpbmUgaW50IGxvbmcgbG9uZwpjb25zdCBpbnQgbW9kID0gMTAwMDAwMDAwMCArIDc7Cgp2b2lkIHNvbHZlKCkgewogICAgaW50IG47CiAgICBjaW4gPj4gbjsKCiAgICB2ZWN0b3I8aW50PiBhKG4gKyAxKTsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50PiA+IHBvcyhuICsgMSk7CiAgICBzZXQ8aW50PiBiYWQ7CgogICAgYmFkLmluc2VydCgwKTsKICAgIGJhZC5pbnNlcnQobiArIDEpOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgICAgIGlmIChhW2ldID4gbikgewogICAgICAgICAgICBiYWQuaW5zZXJ0KGkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBvc1thW2ldXS5wdXNoX2JhY2soaSk7CiAgICAgICAgfQogICAgfQoKICAgIGludCB0b3RhbF9iYWxhbmNlZCA9IDA7CiAgICBmb3IgKGludCB2ID0gbjsgdiA+PSAxOyAtLXYpIHsKICAgICAgICBpbnQgayA9IHBvc1t2XS5zaXplKCk7CgogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IGsgLSB2OyArK2opIHsKICAgICAgICAgICAgaW50IExfcG9zID0gcG9zW3ZdW2pdOwogICAgICAgICAgICBpbnQgUl9wb3MgPSBwb3Nbdl1baiArIHYgLSAxXTsKICAgICAgICAgICAgYXV0byBpdCA9IGJhZC51cHBlcl9ib3VuZChMX3Bvcyk7CiAgICAgICAgICAgIGludCBCX25leHQgPSAqaXQ7CgogICAgICAgICAgICBpZiAoQl9uZXh0IDwgUl9wb3MpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbnQgQl9MID0gKnByZXYoaXQpOwogICAgICAgICAgICBpbnQgQl9SID0gQl9uZXh0OwogICAgICAgICAgICBpbnQgcHJldl92X3BvcyA9IChqID4gMCkgPyBwb3Nbdl1baiAtIDFdIDogMDsKICAgICAgICAgICAgaW50IG5leHRfdl9wb3MgPSAoaiArIHYgPCBrKSA/IHBvc1t2XVtqICsgdl0gOiBuICsgMTsKCiAgICAgICAgICAgIGludCBsaW1pdF9MID0gbWF4KEJfTCwgcHJldl92X3Bvcyk7CiAgICAgICAgICAgIGludCBsaW1pdF9SID0gbWluKEJfUiwgbmV4dF92X3Bvcyk7CiAgICAgICAgICAgIHRvdGFsX2JhbGFuY2VkICs9IDFMTCAqIChMX3BvcyAtIGxpbWl0X0wpICogKGxpbWl0X1IgLSBSX3Bvcyk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCBwOiBwb3Nbdl0pIHsKICAgICAgICAgICAgYmFkLmluc2VydChwKTsKICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCB0b3RhbF9iYWxhbmNlZCA8PCBlbDsKfQoKaW50MzJfdCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjb3V0LnRpZShudWxscHRyKSwgY2luLnRpZShudWxscHRyKTsKCiAgICBpbnQgdHQgPSAxOwogICAgLy9jaW4gPj4gdHQ7CiAgICB3aGlsZSAodHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=