Submission #636447

#TimeUsernameProblemLanguageResultExecution timeMemory
636447borisAngelovArranging Shoes (IOI19_shoes)C++14
100 / 100
69 ms12712 KiB
#include <bits/stdc++.h> #include "shoes.h" using namespace std; const int MAXN = 200005; int n; vector<pair<int, int>> same_size[MAXN]; vector<pair<int, int>> matchings; struct FenwickTree { int fenwick[MAXN]; void update(int pos, int val) { while (pos < 2 * n) { fenwick[pos] += val; pos += (pos & (-pos)); } } int query(int pos) { int result = 0; while (pos > 0) { result += fenwick[pos]; pos -= (pos & (-pos)); } return result; } }; FenwickTree Fenwick; long long count_swaps(std::vector<int> shoes) { n = int(shoes.size()) / 2; for (int i = 0; i < 2 * n; i++) { same_size[abs(shoes[i])].push_back({shoes[i], i}); } long long ans = 0; for (int i = 1; i <= n; i++) { sort(same_size[i].begin(), same_size[i].end()); for (int j = 0; j < int(same_size[i].size()) / 2; j++) { int l = same_size[i][j].second; int r = same_size[i][j + int(same_size[i].size()) / 2].second; if (l > r) { swap(l, r); ans++; } matchings.push_back({l + 1, r + 1}); } } sort(matchings.begin(), matchings.end()); for (int i = 1; i <= 2 * n; i++) Fenwick.update(i, 1); for (int i = 0; i < matchings.size(); i++) { int l = matchings[i].first; int r = matchings[i].second; if (r - l > 1) ans += Fenwick.query(r - 1) - Fenwick.query(l); Fenwick.update(l, -1); Fenwick.update(r, -1); } return ans; }

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:65:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |     for (int i = 0; i < matchings.size(); i++) {
      |                     ~~^~~~~~~~~~~~~~~~~~
#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...