Submission #282495

#TimeUsernameProblemLanguageResultExecution timeMemory
282495its_aks_ulureMountains (NOI20_mountains)C++14
100 / 100
1360 ms44808 KiB
#include<bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
const long long mod = 1e9 + 7;

int n;
long long arr[N];
int segtree[2 * N];
long merge(long x, long y){
    return x + y;
}
void segtree_update(int ind, int val, int n_){
    for(segtree[ind += n_] += val; ind > 1; ind >>= 1)
        segtree[ind >> 1] = merge(segtree[ind], segtree[ind ^ 1]);
}
long segtree_query(int l, int r, int n_){
    long res = 0;
    for(l += n_, r += n_; l < r; l >>= 1, r >>= 1){
        if((l & 1) == 1)
            res = merge(res, segtree[l++]);
        if((r & 1) == 1)
            res = merge(res, segtree[--r]);
    }
    return res;
}
void solve(int test){
    set<long long> s;
    int i = 0;
    for(i = 0; i < n; i++)
        s.insert(arr[i]);
    map<long long, int> mp;
    int x = 0;
    for(long long xx : s)
        mp[xx] = x++;
    vector<int> cnt(n);
    int n_ = s.size();
    for(i = 0; i < n; i++){
        //cout <<
        cnt[i] = segtree_query(0, mp[arr[i]], n_);
        segtree_update(mp[arr[i]], 1, n_);
    }
    memset(segtree, 0, sizeof(segtree));
    long long ans = 0;
    for(i = n - 1; i >= 0; i--){
        ans += cnt[i] * 1LL * segtree_query(0, mp[arr[i]], n_);
        segtree_update(mp[arr[i]], 1, n_);
    }
    cout << ans << "\n";
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t = 1;
    //cin >> t;
    for(int test = 1; test <= t; test++){
        int i = 0;
        cin >> n;
        for(i = 0; i < n; i++)
            cin >> arr[i];
        solve(test);
    }
    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...