Submission #1322189

#TimeUsernameProblemLanguageResultExecution timeMemory
1322189Roumak77Mountains (NOI20_mountains)C++20
100 / 100
702 ms45024 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

template<class T> using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;


int main() {
    
    ll n;
    cin >> n;
    
    vector<ll> list_n(n, 0);
    
    for(ll i = 0; i < n; i++){
        cin >> list_n[i];
    }
    
    vector<ll> forward(n, 0);
    vector<ll> backward(n, 0);
    
    ordered_set<ll> o1;
    
    o1.insert(list_n[0]);
    for(ll i = 1; i < n; i++){
        forward[i] = o1.order_of_key(list_n[i]);
        o1.insert(list_n[i]);
    }
    
    
    ordered_set<ll> o2;
    
    o2.insert(list_n[n - 1]);
    for(ll i = n - 2; i >= 0; i--){
        backward[i] = o2.order_of_key(list_n[i]);
        o2.insert(list_n[i]);
    }
    
    
    
    ll t = 0;
    for(ll i = 0; i < n; i++){
        t += forward[i] * backward[i];
    }
    
    cout << t << endl;
    

}
#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...