제출 #723809

#제출 시각아이디문제언어결과실행 시간메모리
723809t6twotwoArranging Shoes (IOI19_shoes)C++17
100 / 100
164 ms139756 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; long long count_swaps(vector<int> s) { int n = s.size() / 2; vector<queue<int>> q(2 * n + 1); vector<int> p(2 * n, -1); for (int i = 0; i < 2 * n; i++) { int x = n + s[i]; int y = n - s[i]; if (!q[y].empty()) { p[q[y].front()] = i; q[y].pop(); } else { q[x].push(i); } } vector<int> bit(2 * n + 1); auto add = [&](int p, int v) { for (int i = p + 1; i <= 2 * n; i += i & -i) { bit[i] += v; } }; auto sum = [&](int p) { int ans = 0; for (int i = p; i > 0; i -= i & -i) { ans += bit[i]; } return ans; }; auto range_sum = [&](int l, int r) { return sum(r) - sum(l); }; for (int i = 0; i < 2 * n; i++) { add(i, 1); } int64_t ans = 0; for (int i = 0; i < 2 * n; i++) { if (p[i] == -1) continue; ans += range_sum(i + 1, p[i]) + (s[i] > 0); add(p[i], -1); } 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...