Submission #1276230

#TimeUsernameProblemLanguageResultExecution timeMemory
1276230nanaseyuzukiMountains (NOI20_mountains)C++20
100 / 100
288 ms29780 KiB
#include <bits/stdc++.h> // Author: Kazuki_Will_Win_VOI_8703 #define fi first #define se second #define pii pair<int, int> #define int long long #define all(a) a.begin(), a.end() using namespace std; const int mn = 3e5 + 5, inf = 1e9; int n, a[mn]; int st[4 * mn]; vector <int> pos[mn]; void update(int id, int l, int r, int pos){ if(l > pos || r < pos) return; if(l == r){ st[id] ++; return; } int mid = (l + r) >> 1; update(2 * id, l, mid, pos); update(2 * id + 1, mid + 1, r, pos); st[id] = st[2 * id] + st[2 * id + 1]; } int get(int id, int l, int r, int u, int v){ if(l > v || r < u) return 0; if(l >= u && r <= v) return st[id]; int mid = (l + r) >> 1; return get(2 * id, l, mid, u, v) + get(2 * id + 1, mid + 1, r, u, v); } void solve(){ cin >> n; int res = 0; vector <int> reina; for(int i = 1; i <= n; i++){ cin >> a[i]; reina.push_back(a[i]); } sort(all(reina)); reina.erase(unique(all(reina)), reina.end()); for(int i = 1; i <= n; i++){ a[i] = lower_bound(reina.begin(), reina.end(), a[i]) - reina.begin() + 1; pos[a[i]].push_back(i); } for(int p = 1; p <= reina.size(); p++){ for(auto i : pos[p]) res += get(1, 1, n, 1, i) * get(1, 1, n, i, n); for(auto i : pos[p]) update(1, 1, n, i); } cout << res << '\n'; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int 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...