Submission #1321695

#TimeUsernameProblemLanguageResultExecution timeMemory
1321695m0rtu_us0512Mountains (NOI20_mountains)C++20
100 / 100
350 ms35648 KiB
#include <bits/stdc++.h> using namespace std; struct BIT{ int64_t N ; vector<int64_t> x ; void reset(int64_t size){ N = size ; x.assign(N+1, 0) ; } // 1 <= i <= N void add(int64_t i, int64_t v=1){ for( ; i<=N ; i+=i&-i ) x[i] += v ; } // sum(x[1~i]) auto get(int64_t i){ int64_t s = 0 ; for( ; i ; i-=i&-i ) s += x[i] ; return s ; } } ; int64_t N ; map<int64_t,vector<int64_t>> H ; int main(){ ios_base::sync_with_stdio(0) ; cin.tie(0) ; cin >> N ; for( int64_t i=1 ; i<=N ; i++ ){ int64_t h ; cin >> h ; if( H.find(h) == H.end() ) H[h] = {i} ; else H[h].push_back(i) ; } BIT bit ; bit.reset(N) ; int64_t ans = 0 ; for( auto [h,x] : H ){ // cout << h << ":"; for( auto &xx : x ){ // cout << setw(2) << xx ; auto L = bit.get(xx) ; auto R = bit.get(N) - L ; ans += L*R ; } for( auto &xx : x ) bit.add(xx, 1) ; // cout << endl ; } cout << ans << endl ; return 0 ; }
#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...