#include "bits/stdc++.h"
using std::cout, std::cin, std::vector, std::string;
long long int left=0,right=0;
long long int n,tmp,count=0;
long long int j,i,last=0;
int indexx;
class FastSortedInsert {
private:
std::set<int> orderedSet;
public:
int insert(int element) {
auto it = orderedSet.insert(element).first;
return std::distance(orderedSet.begin(), it);
}
};
int insertSorted(std::multiset<long long int>& vec, int value, int& multi) {
vec.insert(value);
multi++;
return std::distance(vec.begin(), vec.find(value));
}
void solve(){
cin >> n;
FastSortedInsert si;
vector<std::pair<long long int, long long int>> h(n);
std::vector<long long int > dp(n);
for (long long int i =0; i<n;i++){
cin>>h[i].first;
h[i].second=i;
}
std::sort(h.begin(), h.end());
int multi =0;
si.insert(h[0].second);
multi++;
si.insert(h[1].second);
multi++;
if (h[1].first != h[0].first) multi=1;
indexx=si.insert(h[2].second);
multi++;
if (h[2].first != h[1].first) multi=1;
left= std::max(0,indexx-multi+1);
right=3-multi-left;
count=right*left;
for (i=3; i<n ;i++){
left=right=0;
indexx = si.insert(h[i].second);
multi++;
if (h[i].first != h[i-1].first) multi=1;
left= std::max(0,indexx-multi+1);
right=i+1-multi-left;
count+=right*left;
}
cout << count << '\n';
}
int main(){
std::ios::sync_with_stdio(false);
cin.tie(nullptr);
unsigned long long ct =1;
// cin >> ct;
while(ct--) solve();
}
# | 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... |