제출 #1150892

#제출 시각아이디문제언어결과실행 시간메모리
1150892gygArranging Shoes (IOI19_shoes)C++20
100 / 100
205 ms31268 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; #define sig signed #define int long long #define arr array #define vec vector #define pii pair<int, int> #define fir first #define sec second const int N = 2e5 + 5; int n; arr<int, N> a; arr<int, N> prm; void prm_cmp() { map<int, vec<int>> ng, ps; for (int i = 1; i <= n; i++) { if (a[i] < 0) ng[-a[i]].push_back(i); else ps[a[i]].push_back(i); } vec<pii> ord; for (pair<int, vec<int>> x : ng) for (int i = 0; i < x.sec.size(); i++) ord.push_back({x.sec[i], ps[x.fir][i]}); auto cmp = [](pii x, pii y) { return min(x.fir, x.sec) < min(y.fir, y.sec); }; sort(ord.begin(), ord.end(), cmp); for (int i = 0; i < ord.size(); i++) prm[ord[i].fir] = 2 * i + 1, prm[ord[i].sec] = 2 * i + 2; } struct Sgt { arr<int, 4 * N> sg; void upd(int i, int x, int u = 1, int lw = 1, int hg = n) { if (lw == hg) { sg[u] += x; return; } int md = (lw + hg) / 2; if (i <= md) upd(i, x, 2 * u, lw, md); else upd(i, x, 2 * u + 1, md + 1, hg); sg[u] = sg[2 * u] + sg[2 * u + 1]; } int qry(int l, int r, int u = 1, int lw = 1, int hg = n) { if (l > r) return 0; if (l <= lw && hg <= r) return sg[u]; int md = (lw + hg) / 2, ans = 0; if (l <= md) ans += qry(l, r, 2 * u, lw, md); if (r > md) ans += qry(l, r, 2 * u + 1, md + 1, hg); return ans; } } sgt; int ans_cmp() { int ans = 0; for (int i = n; i >= 1; i--) { ans += sgt.qry(1, prm[i] - 1); sgt.upd(prm[i], +1); } return ans; } int count_swaps(vec<sig> _a) { n = _a.size(); for (int i = 1; i <= n; i++) a[i] = _a[i - 1]; prm_cmp(); int ans = ans_cmp(); // for (int i = 1; i <= n; i++) cout << i << ": " << prm[i] << '\n'; return ans; }
#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...