Submission #590765

#TimeUsernameProblemLanguageResultExecution timeMemory
590765DAleksaArranging Shoes (IOI19_shoes)C++17
45 / 100
68 ms16024 KiB
#include <bits/stdc++.h> #include "shoes.h" using namespace std; template<typename T, int start> class Fenwick { private: const T operation_neutral = 0; T operation(T a, T b) { return a + b; } T inverseOperation(T a, T b) { return a - b; } public: vector<T> fenwick; int n; Fenwick(int _n) { n = _n; fenwick.resize(n); fill(fenwick.begin(), fenwick.end(), operation_neutral); } void update(int x, T v) { for(int i = x + 1 - start; i <= n - start; i += (i & -i)) { fenwick[i - 1 + start] = operation(fenwick[i - 1 + start], v); } } T get(int x) { T v = operation_neutral; for(int i = x + 1 - start; i >= 1; i -= (i & -i)) { v = operation(v, fenwick[i - 1 + start]); } return v; } T get(int l, int r) { if(l == start) return get(r); return inverseOperation(get(r), get(l-1)); } }; long long count_swaps(vector<int> a) { int n = a.size(); vector<int> left[n / 2 + 1], right[n / 2 + 1]; for(int i = 0; i < n; i++) { if(a[i] < 0) left[-a[i]].push_back(i); else right[a[i]].push_back(i); } int cnt[n / 2 + 1]; for(int i = 0; i <= n / 2; i++) cnt[i] = 0; int pos[n]; int c = 0; for(int i = 0; i < n; i++) { if(a[i] < 0) { pos[i] = c; pos[right[-a[i]][cnt[-a[i]]]] = c + 1; cnt[-a[i]]++; c += 2; } } Fenwick<int, 0> fw(n); long long res = 0; for(int i = 0; i < n; i++) { res += fw.get(pos[i] + 1, n - 1); fw.update(pos[i], 1); } return res; }
#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...