Submission #523843

#TimeUsernameProblemLanguageResultExecution timeMemory
523843pakhomoveeArranging Shoes (IOI19_shoes)C++17
10 / 100
1 ms204 KiB
#include "shoes.h" #include <cmath> using namespace std; struct fenwick { vector<int> f; void init(int n) { f.assign(n, 0); } int get(int i) { int ans = 0; while (i >= 0) { ans += f[i]; i = (i & (i + 1)) - 1; } return ans; } void upd(int i, int n, int val) { while (i < n) { f[i] += val; i = i | (i + 1); } } }; long long count_swaps(std::vector<int> s) { const int n = s.size(); long long ans = 0; vector<vector<int>> idPlus(n); vector<vector<int>> idMinus(n); for (int i = 0; i < n; ++i) { if (s[i] > 0) { idPlus[abs(s[i])].push_back(i); } else { idMinus[abs(s[i])].push_back(i); } } fenwick ft; ft.init(n + 1); for (int i = 0; i < n; ++i) { for (int j = 0; j < idPlus[i].size(); ++j) { idPlus[i][j] += ft.get(idPlus[i][j]); idMinus[i][j] += ft.get(idMinus[i][j]); if (idPlus[i][j] > idMinus[i][j]) { ans += -(idMinus[i][j] - idPlus[i][j]) - 1; } else { ans += -(idPlus[i][j] - idMinus[i][j]); } int l = min(idPlus[i][j], idMinus[i][j]); int r = max(idPlus[i][j], idMinus[i][j]); ft.upd(l, n + 1, 1); ft.upd(r, n + 1, -1); } } return ans; }

Compilation message (stderr)

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