Submission #1277367

#TimeUsernameProblemLanguageResultExecution timeMemory
1277367vuquangsangMountains (NOI20_mountains)C++20
100 / 100
113 ms7620 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 3e5 + 2;
int n;
long long a[N];

void compress()
{
    vector<long long> V;
    for(int i = 1; i <= n; i++) V.push_back(a[i]);
    sort(V.begin(), V.end());
    for(int i = 1; i <= n;i++) {
        a[i] = lower_bound(V.begin(), V.end(), a[i]) - V.begin() + 1;
    }
}

long long bit[N];

void upd(int x, int v)
{
    for(; x <= n; x += x &-x) bit[x] += v;
}
long long get(int x)
{
    long long ans = 0;
    for(; x >= 1; x -= x & -x) ans += bit[x];
    return ans;
}
long long get(int l, int r)
{
    return get(r) - get(l - 1);
}
long long Res[N];
void solve()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];
    compress();

    for(int i = 1; i <= n; i++) {
        Res[i] = get(1, a[i] - 1);
        upd(a[i], 1);
    }
    for(int i = 1; i <= n; i++) bit[i] = 0;

    long long ans = 0;
    for(int i = 1; i <= n; i++) {
        ans += get(a[i] + 1, n);
        upd(a[i], Res[i]);
    }
    cout << ans;
}
main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

    #define TASK "mountains"
    if(fopen(TASK".INP", "r")) {
        freopen(TASK".INP", "r", stdin);
        freopen(TASK".OUT", "w", stdout);
    }

    solve();

    cerr << "\nTime" << 0.001 * clock() << "s "; return 0;


}

Compilation message (stderr)

Mountains.cpp:54:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   54 | main()
      | ^~~~
Mountains.cpp: In function 'int main()':
Mountains.cpp:60:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   60 |         freopen(TASK".INP", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Mountains.cpp:61:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   61 |         freopen(TASK".OUT", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...