Submission #1303940

#TimeUsernameProblemLanguageResultExecution timeMemory
1303940nathlol2Mountains (NOI20_mountains)C++20
100 / 100
524 ms28892 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 333333;
int n, a[N], lf[N], rf[N], bit[N];
map<int, int> mp;
void clear(){
    memset(bit, 0, sizeof bit);
}
int qry(int idx){
    int res = 0;
    for(;idx>0;idx-=idx & -idx) res += bit[idx];
    return res;
}
void upd(int idx, int x){
    for(;idx<=n;idx+=idx & -idx) bit[idx] += x;
}


signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n;
    for(int i = 1;i<=n;i++){
        cin >> a[i];
        mp[a[i]];
    }
    int cc = 0;
    for(auto &[x, y] : mp){
        y = ++cc;
    }
    memset(bit, 0, sizeof bit);
    for(int i = 1;i<=n;i++){
        a[i] = mp[a[i]];
        lf[i] = qry(a[i] - 1);
        upd(a[i], 1);
    }
    memset(bit, 0, sizeof bit);
    for(int i = n;i>=1;i--){
        rf[i] = qry(a[i] - 1);
        upd(a[i], 1);
    }
    int ans = 0;
    for(int i = 2;i<n;i++) ans += lf[i] * rf[i];
    cout << ans;
}
#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...