Submission #483213

#TimeUsernameProblemLanguageResultExecution timeMemory
483213lukaszgnieckiArranging Shoes (IOI19_shoes)C++17
Compilation error
0 ms0 KiB
#include "shoes.h" #include <bits/stdc++.h> #define ll long long #define str string #define pii pair<int, int> #define pll pair<ll, ll> #define fi first #define se second #define vc vector<char> #define vvc vector<vc> #define vi vector<int> #define vvi vector<vi> #define vvvi vector<vvi> #define vvvvi vector<vvvi> #define vll vector<ll> #define vvll vector<vll> #define vvvll vector<vvll> #define vvvvll vector<vvvll> #define vs vector<str> #define vvs vector<vs> #define vpii vector<pii> #define vvpii vector<vpii> #define vpll vector<pll> #define vvpll vector<vpll> #define vb vector<bool> #define vvb vector<vb> #define rep(i, a, b) for (int i = (a); i < int(b); i++) #define repi(i, a, b) for (int i = (a); i <= int(b); i++) using namespace std; //TODO: SOLUTION void mktr(vi & T, int n) { int m = 1; while (m < n) m *= 2; T = vi(2 * m, 1); for (int i = m - 1; i > 0; i--) { T[i] = T[2 * i] + T[2 * i + 1]; } } void upd(vi & T, int x, int y) { x += T.size() / 2; T[x] = y; x /= 2; while (x > 0) { T[x] = T[2 * x] + T[2 * x + 1]; x /= 2; } } int get_sum(vi & T, int l, int r) { int sum = 0; l += T.size() / 2; r += T.size() / 2; while (l <= r) { if (l == 0 && r == 0) return sum; if (l % 2 == 1) { sum += T[l++]; } if (r % 2 == 0) { sum += T[r--]; } l /= 2; r /= 2; } return sum; } ll count_swaps(vi & shoes) { int n = shoes.size() / 2; ll ans = 0; vector<queue<int>> pos(2 * n + 1); rep(i, 0, 2 * n) { int x = shoes[i]; if (shoes[i] < 0) x = -x + n; pos[x].push(i); } vi tr; mktr(tr, 2*n); int m = tr.size() / 2; rep(i, 0, 2 * n) { if (tr[m + i] == 0) continue; int x = shoes[i]; int y = x + n; if (x < 0) y = -x; int ps = pos[y].front(); pos[y].pop(); ll moves = get_sum(tr, i + 1, ps - 1); //cerr << i << " " << ps << " " << moves << endl; //rep(j, 0, 2 * m) cerr << tr[j] << " "; //cerr << endl; if (y > n) moves++; ans += moves; upd(tr, ps, 0); } return ans; } /* int main() { vi sh1 = {2, 1, -1, -2}; vi sh2 = {-2, 2, 2, -2, -2, 2}; cout << count_swaps(sh1) << endl; cout << count_swaps(sh2) << endl; return 0; }*/

Compilation message (stderr)

/usr/bin/ld: /tmp/ccf43dGm.o: in function `main':
grader.cpp:(.text.startup+0x2a8): undefined reference to `count_swaps(std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status