#include #include using namespace __gnu_pbds; using namespace std; template using Tree = tree, rb_tree_tag, tree_order_statistics_node_update>; #define FOR(i, j, k, l) for(int i = (j); i < (k); i += (l)) #define FORD(i, j, k, l) for(int i =(j); i >= (k); i -= (l)) #define REP(i, n) FOR(i, 0, n, 1) #define REPD(i, n) FORD(i, n, 0, 1) typedef long long ll; const ll INFF = (ll)1e18; const int INF = (int)1e9; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector tm(n); REP(i, n){ cin >> tm[i]; } const int mx = (int)1e6 + 5; vector> a(mx); REP(i, n){ a[tm[i]].push_back(i); } Tree oset; ll ans = 0; REP(i, mx){ FOR(j, 0, (int)a[i].size() - 1, 1){ int f = a[i][j]; int s = a[i][j + 1]; int r = oset.order_of_key(s); int l = oset.order_of_key(f); //cout << i << " " << f << " " << s << " " << r << " " << l << "\n"; if(r - l == s - f - 1){ ans += s - f - 1; //cout << f << " " << s << endl; } } REP(j, a[i].size()){ oset.insert(a[i][j]); } } cout << ans << "\n"; return 0; }