Submission #289954

#TimeUsernameProblemLanguageResultExecution timeMemory
289954mth1908Arranging Shoes (IOI19_shoes)C++14
100 / 100
110 ms11504 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long #define ar array #define pii pair<int, int> #define sz(s) (int) s.size() #define all(s) s.begin(), s.end() template<class T> bool uin(T &a, T b) { return a > b ? (a = b, true) : false; } template<class T> bool uax(T &a, T b) { return a < b ? (a = b, true) : false; } const int N = 2e5 + 5; struct BIT { int t[N]; void upd(int x, int v) { for (int i = x; i < N; i += i & (-i)) t[i] += v; } int qry(int x) { int ret = 0; for (int i = x; i > 0; i -= i & (-i)) ret += t[i]; return ret; } } bit; vector<pii> ord[N]; ll count_swaps(std::vector<int> s) { int n = sz(s) / 2; ll ret = 0; vector<pii> v; for (int i = 0; i < sz(s); i++) { ord[abs(s[i])].emplace_back(s[i], i); } for (int i = 1; i <= n; i++) { sort(all(ord[i])); for (int j = 0; j < sz(ord[i]) / 2; j++) { int l = ord[i][j].second; int r = ord[i][j + sz(ord[i]) / 2].second; if (l > r) { swap(l, r); ret++; } v.emplace_back(l + 1, r + 1); } } for (int i = 1; i <= 2 * n; i++) bit.upd(i, 1); sort(all(v)); for (auto i : v) { ret += bit.qry(i.second - 1) - bit.qry(i.first); bit.upd(i.first, -1); bit.upd(i.second, -1); } return ret; }
#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...