Submission #1181901

#TimeUsernameProblemLanguageResultExecution timeMemory
1181901den1z19Mountains (NOI20_mountains)C++17
64 / 100
2097 ms8864 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;
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 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...