#include #define MAX_H 1000000 using namespace std; int * field; int * heights; int l; /* long long bridge2(int s, int e){ if(s >= e || s < 0 || e > l-1) return 0; int i = s+1; while (i<=e) { if(field[i]==field[s]) return (long long)(i-s-1) + bridge2(s+1,i-1) + bridge2(i,e); if(field[i]>field[s]) return bridge2(s+1,i-1) + bridge2(i,e); i++; } return bridge2(s+1,e); } */ void cleanLess(int j){ for (int i = 0; i < j; i++) heights[i] = -1; } long long bridge(){ long long bridgeL = 0; heights = new int[MAX_H]; for (int i = 0; i < MAX_H; i++) heights[i] = -1; int lastH = 0; for (int i = 0; i < l; i++) { if(field[i]>=lastH){ if(heights[field[i]] != -1){ bridgeL += i - heights[field[i]] - 1; } cleanLess(field[i]); } lastH = field[i]; heights[field[i]] = i; } delete [] heights; return bridgeL; } int main(int argc, char const *argv[]) { int tmp; cin >> l; field = new int[l]; for (int i = 0; i < l; i++) { scanf("%d",&tmp); field[i] = tmp; } cout << bridge() << endl; delete [] field; return 0; }