Submission #209766

#TimeUsernameProblemLanguageResultExecution timeMemory
209766Alexa2001Mountains (NOI20_mountains)C++17
100 / 100
140 ms8728 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int Nmax = 3e5 + 5; ll ans[Nmax], h[Nmax]; int a[Nmax]; int n; class AIB { int ub(int x) { return (x&(-x)); } int a[Nmax]; public: void update(int x) { for(; x<=n; x+=ub(x)) a[x]++; } int query(int x) { int ans = 0; for(; x; x-=ub(x)) ans += a[x]; return ans; } void clear() { memset(a, 0, sizeof(a)); } } aib; int main() { // freopen("input", "r", stdin); cin.sync_with_stdio(false); cin.tie(0); cin >> n; int i; vector<int> ord; for(i=1; i<=n; ++i) { cin >> h[i]; ord.push_back(i); } sort(ord.begin(), ord.end(), [](int x, int y) { return h[x] < h[y]; }); int nr = 0; for(i=0; i<n; ++i) { if(!i || h[ord[i]] != h[ord[i-1]]) ++nr; a[ord[i]] = nr; } for(i=1; i<=n; ++i) { ans[i] = aib.query(a[i]-1); aib.update(a[i]); } aib.clear(); for(i=n; i; --i) { ans[i] *= aib.query(a[i]-1); aib.update(a[i]); } ll sum = 0; for(i=1; i<=n; ++i) sum += ans[i]; cout << sum << '\n'; 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...