Submission #1299990

#TimeUsernameProblemLanguageResultExecution timeMemory
1299990danglayloi1Mountains (NOI20_mountains)C++20
100 / 100
109 ms7608 KiB
#include <bits/stdc++.h>
#define ii pair<int, int>
#define fi first
#define se second
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
using ll = long long;
const ll mod=1e9+7;
const int nx=3e5+5;
int n, bit[nx], pre[nx];
ll a[nx], ans=0;
vector<ll> rar;
int get(int x)
{
    int res=0;
    for(; x > 0; x-=x&-x)
        res+=bit[x];
    return res;
}
void add(int x, int val)
{
    for(; x <= n; x+=x&-x)
        bit[x]+=val;
}
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], rar.emplace_back(a[i]);
    sort(rar.begin(), rar.end());
    rar.erase(unique(rar.begin(), rar.end()), rar.end());
    for(int i = 1; i <= n; i++)
    {
        a[i]=upper_bound(rar.begin(), rar.end(), a[i])-rar.begin();
        pre[i]=get(a[i]-1);
        add(a[i], 1);
    }
    memset(bit, 0, sizeof(bit));
    for(int i = n; i >= 1; i--)
    {
        ans+=1ll*pre[i]*get(a[i]-1);
        add(a[i], 1);
    }
    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...