Submission #1140166

#TimeUsernameProblemLanguageResultExecution timeMemory
1140166grizoArranging Shoes (IOI19_shoes)C++20
100 / 100
194 ms273652 KiB
#include <bits/stdc++.h> #include "shoes.h" using namespace std; using ll = long long; #define debug(v) \ cerr << "Line(" << __LINE__ << ") -> " << #v << " = " ; #define dbx(x) debug(x); cerr << x << "\n"; #define dbg(x) debug(x); cerr << "{ "; for(auto &e : x) cerr << e << ", "; cerr << "} \n"; #define log(x) (31^__builtin_clz(x)) const int N = 1e6+10, MOD = 1e9+7; template<typename T> struct BIT { int size = 0; vector<T> tree; BIT(int n): size(n), tree(n){} // 1-indexed pos (0-index just add ++pos) void add(int pos, ll val){ for(++pos ; pos <= size ; pos += (pos & (-pos))) tree[pos - 1] += val; } T get(int pos){ T res = 0; for(++pos ; pos ; pos -= (pos & (-pos))) res += tree[pos - 1]; return res; } T query(int l, int r){ if(r < l) return 0; return get(r) - get(l - 1); } }; ll count_swaps(vector<int> S){ int n = S.size(); vector<int> a = S; BIT<int> bit(n+1); queue<int> l[n+1], r[n+1]; for(int i = 0 ; i < n ; i ++){ if(a[i] < 0)l[-a[i]].push(i); else r[a[i]].push(i); } ll ans = 0; for(int i = 0 ; i < n ; i ++){ if(a[i] == 0)continue; if(a[i] < 0) { int j = r[-a[i]].front(); r[-a[i]].pop(); l[-a[i]].pop(); a[j] = 0; ans += bit.query(i, j) + j - i - 1; bit.add(j, -1); } else { int j = l[a[i]].front(); l[a[i]].pop(); r[a[i]].pop(); a[j] = 0; ans += bit.query(i, j) + j - i; bit.add(j, -1); } } return ans; } /* */
#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...