제출 #1181901

#제출 시각아이디문제언어결과실행 시간메모리
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...