제출 #1138842

#제출 시각아이디문제언어결과실행 시간메모리
1138842vusalArranging Shoes (IOI19_shoes)C++20
컴파일 에러
0 ms0 KiB
#include <vector> #include <cmath> #include <algorithm> class FenwickTree { private: std::vector<int> tree; int size; public: FenwickTree(int n) : tree(n + 1, 0), size(n) {} void update(int index, int value) { while (index <= size) { tree[index] += value; index += index & (-index); } } int query(int index) { int sum = 0; while (index > 0) { sum += tree[index]; index -= index & (-index); } return sum; } }; long long count_swaps(std::vector<int>& S) { int n = S.size(); // Ayaqqabıların ölçülərinə görə yenidən təşkil olunmuş massiv std::vector<std::pair<int, int>> shoes(n); for (int i = 0; i < n; ++i) { shoes[i] = {std::abs(S[i]), S[i] > 0 ? 1 : -1}; } // Unikal ölçüləri tapmaq std::vector<int> sizes; for (auto& shoe : shoes) { sizes.push_back(shoe.first); } std::sort(sizes.begin(), sizes.end()); sizes.erase(std::unique(sizes.begin(), sizes.end()), sizes.end()); // Ölçülərin indekslərini kompressiya etmək std::unordered_map<int, int> size_to_index; for (int i = 0; i < sizes.size(); ++i) { size_to_index[sizes[i]] = i + 1; } // Sol və sağ ayaqqabılar üçün ayrı inversiya hesablamaları std::vector<std::pair<int, int>> left_shoes, right_shoes; for (int i = 0; i < n; ++i) { if (shoes[i].second > 0) { left_shoes.push_back({size_to_index[shoes[i].first], i}); } else { right_shoes.push_back({size_to_index[shoes[i].first], i}); } } // Sol ayaqqabılar üçün inversiya sayını hesablamaq long long left_inversions = 0; FenwickTree left_tree(sizes.size()); std::sort(left_shoes.begin(), left_shoes.end()); for (auto& shoe : left_shoes) { left_inversions += left_tree.query(sizes.size()) - left_tree.query(shoe.first - 1); left_tree.update(shoe.first, 1); } // Sağ ayaqqabılar üçün inversiya sayını hesablamaq long long right_inversions = 0; FenwickTree right_tree(sizes.size()); std::sort(right_shoes.begin(), right_shoes.end()); for (auto& shoe : right_shoes) { right_inversions += right_tree.query(sizes.size()) - right_tree.query(shoe.first - 1); right_tree.update(shoe.first, 1); } return left_inversions + right_inversions; }

컴파일 시 표준 에러 (stderr) 메시지

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