Submission #1267481

#TimeUsernameProblemLanguageResultExecution timeMemory
1267481vukhacminhMountains (NOI20_mountains)C++20
100 / 100
120 ms9948 KiB
/**
*    Author :  Vu Khac Minh
**/
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 3e5 + 5;
const int mod = 1e9+7;
ll n,pre[maxn],suf[maxn],a[maxn],res,bit[maxn];
vector<ll> ctz;
void add(int u,int v)
{
    for(;u<=n;u+=u&-u) bit[u]+=v;
}
ll get(int u)
{
    ll sum = 0;
    for(;u;u-=u&-u) sum+= bit[u];
    return sum;
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    for(int i = 1;i<=n;i++)
    {
        cin>>a[i];
        ctz.push_back(a[i]);
    }
    sort(ctz.begin(),ctz.end());
    ctz.erase(unique(ctz.begin(),ctz.end()));
    for(int i = 1;i<=n;i++)
    {
        a[i] = lower_bound(ctz.begin(),ctz.end(),a[i]) - ctz.begin()+1;
        pre[i] = get(a[i]-1);
        add(a[i],1);
    }
    memset(bit,0,sizeof bit);
    add(a[n],1);
    for(int i = n-1;i>=2;i--)
    {
        res+= pre[i]* get(a[i]-1);
       // cout<<i<<" "<<pre[i-1]<<" "<< get(a[i]-1)<<'\n';;
        add(a[i],1);
    }
    cout<<res;
    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...