Submission #1322559

#TimeUsernameProblemLanguageResultExecution timeMemory
1322559ray1457Mountains (NOI20_mountains)C++20
100 / 100
488 ms33304 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define int ll #define vi vector<int> #define pii pair<int, int> #define ff first #define ss seecond #define all(x) x.begin(),x.end() #define pb push_back const int INF = 1e18; class BIT { public: int n; vi t; BIT(const int N) : n(N), t(N+1, 0) {}; void update(int p, int v) { while (p <= n) { t[p] += v; p += (p & -p); } } int sum(int r) { int ans = 0; while (r > 0) { ans += t[r]; r -= r&-r; } return ans; } int query(int l, int r) { return sum(r) - sum(l-1); } }; void solve() { int n; cin >> n; vi a(n); for (auto &i : a) cin >> i; vi v = a; sort(all(v)); v.erase(unique(all(v)), v.end()); map<int, int> idx; for (int i = 0; i<v.size(); i++) { idx[v[i]] = i+1; } for (int i = 0; i<n; i++) { a[i] = idx[a[i]]; } BIT lt(n), rt(n); vi l(n, 0), r(n, 0); for (int i = 0; i<n; i++) { if (a[i] > 1) { l[i] = lt.query(1, a[i]-1); } lt.update(a[i], 1); } for (int i = n-1; i>=0; i--) { if (a[i] > 1) { r[i] = rt.query(1, a[i]-1); } rt.update(a[i], 1); } int ans = 0; for (int i = 0; i<n; i++) { ans += l[i]*r[i]; } cout << ans; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t; t = 1; // cin >> t; while (t--) { solve(); } }
#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...