제출 #1270502

#제출 시각아이디문제언어결과실행 시간메모리
1270502hoangtien69Mountains (NOI20_mountains)C++20
100 / 100
114 ms12292 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 3e5 + 5;

vector<int> peal;
int n;
int a[MAXN];
int bit[MAXN];
int l[MAXN];
int r[MAXN];

int findd(int x)
{
    return lower_bound(peal.begin(), peal.end(), x) - peal.begin() + 1;
}
void add(int pos, int val)
{
    for (; pos <= n; pos += pos & -pos)
    {
        bit[pos] += val;
    }
}
int get(int pos)
{
    int res = 0;
    for (; pos > 0; pos -= pos & -pos)
    {
        res += bit[pos];
    }
    return res;
}

signed 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];
        peal.push_back(a[i]);
    }
    sort(peal.begin(), peal.end());
    peal.erase(unique(peal.begin(), peal.end()), peal.end());
    for (int i = 1; i <= n; i++)
    {
        a[i] = findd(a[i]);
    }
    for (int i = 1; i <= n; i++)
    {
        l[i] = get(a[i] - 1);
        add(a[i], 1);
    }
    memset(bit, 0, sizeof bit);
    for (int i = n; i >= 1; i--)
    {
        r[i] = get(a[i] - 1);
        add(a[i], 1);
    }
    int ans = 0;
    for (int i = 1; i <= n; i++)
    {
        ans += l[i] * r[i];
    }
    cout << ans;
    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...