Submission #1181847

#TimeUsernameProblemLanguageResultExecution timeMemory
1181847den1z19Mountains (NOI20_mountains)C++17
64 / 100
2095 ms6532 KiB
#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;
vector<std::pair<long long int, long long int>> h;
std::multiset<long long int > dp;
long long int j,i,last=0;
int indexx;


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;
h.reserve(n);
for (long long int i =0; i<n;i++){
    cin>>tmp;
    h.emplace_back(tmp,i);
}

std::sort(h.begin(), h.end());




int multi =0;
insertSorted(dp, h[0].second,multi);
insertSorted(dp, h[1].second,multi);
if (h[1].first != h[0].first) multi=1;
indexx = insertSorted(dp, h[2].second,multi);
if (h[2].first != h[1].first) multi=1;


left= std::max(0,indexx-multi+1);
right=dp.size()-multi-left;
count=right*left;

for (i=3; i<n ;i++){
    left=right=0;
    indexx = insertSorted(dp, h[i].second,multi);
    if (h[i].first != h[i-1].first) multi=1;
    left= std::max(0,indexx-multi+1);
    right=dp.size()-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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...