Submission #374932

#TimeUsernameProblemLanguageResultExecution timeMemory
374932Alex_tz307Arranging Shoes (IOI19_shoes)C++17
45 / 100
143 ms26976 KiB
#include <bits/stdc++.h> using namespace std; using int64 = long long; vector<int> aib; void update(int x, int N) { for(int i = x; i <= N; i += i & -i) ++aib[i]; } int query(int x) { int ans = 0; for(int i = x; i > 0; i -= i & -i) ans += aib[i]; return ans; } int64 count_swaps(vector<int> s) { int N = s.size(); vector<vector<int>> from_s(N + 1); int add = N / 2; for(int i = 0; i < N; ++i) from_s[s[i] + add].emplace_back(i); vector<int> t, ptr(N + 1); for(int i = 0; i < N / 2; ++i) { int negative, positive; if(s[i] > 0) negative = add - s[i], positive = s[i] + add; else negative = s[i] + add, positive = add - s[i]; t.emplace_back(from_s[negative][ptr[negative]++]); t.emplace_back(from_s[positive][ptr[positive]++]); } vector<vector<int>> from_t(N + 1); for(int i = 0; i < N; ++i) from_t[s[t[i]] + add].emplace_back(i); vector<int> perm(N + 1); int cnt = 0; for(int i = 0; i <= N; ++i) for(int j = 0; j < (int)from_s[i].size(); ++j) { int poz = from_s[i][j] + 1; perm[poz] = from_t[i][j] + 1; } int64 ans = 0; aib.resize(N + 1); for(int i = N; i > 0; --i) { ans += query(perm[i] - 1); update(perm[i], N); } return ans; }

Compilation message (stderr)

shoes.cpp: In function 'int64 count_swaps(std::vector<int>)':
shoes.cpp:40:9: warning: unused variable 'cnt' [-Wunused-variable]
   40 |     int cnt = 0;
      |         ^~~
#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...