Submission #788124

#TimeUsernameProblemLanguageResultExecution timeMemory
788124aykhnArranging Shoes (IOI19_shoes)C++14
100 / 100
114 ms33372 KiB
#include <bits/stdc++.h> #include "shoes.h" // author: aykhn using namespace std; typedef long long ll; #define TC int t; cin >> t; while (t--) _(); #define OPT ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define all(v) v.begin(), v.end() #define pii pair<int, int> #define mpr make_pair #define eb emplace_back #define new int32_t #define pb push_back #define ts to_string #define fi first #define se second #define ins insert #define inf 0x3F3F3F3F #define infll 0x3F3F3F3F3F3F3F3FLL #define bpc __builtin_popcount int n, sz = 1; vector<int> st; void add(int lx, int rx, int l, int r, int x) { if (l >= rx || r <= lx) return; if (l >= lx && r <= rx) { st[x]++; return; } int mid = (l + r) >> 1; add(lx, rx, l, mid, 2*x+1); add(lx, rx, mid, r, 2*x+2); } int get(int ind, int l, int r, int x) { if (l + 1 == r) return st[x]; int mid = (l + r) >> 1; if (ind < mid) return st[x] + get(ind, l, mid, 2*x+1); else return st[x] + get(ind, mid, r, 2*x+2); } long long count_swaps(vector<int> v) { n = v.size(); while (sz < n) sz <<= 1; st.assign(sz << 1, 0); set<int> idx[2][n]; for (int i = 0; i < n; i++) { idx[v[i] > 0][abs(v[i])].ins(i); } ll ans = 0; for (int i1 = 0; i1 < n; i1++) { int x = v[i1]; if (idx[x > 0][abs(x)].empty() || i1 != *idx[x > 0][abs(x)].begin()) continue; idx[x > 0][abs(x)].erase(idx[x > 0][abs(x)].begin()); int i = i1 + get(i1, 0, sz, 0); int id = *idx[x < 0][abs(x)].begin(); idx[x < 0][abs(x)].erase(idx[x < 0][abs(x)].begin()); int rid = id + get(id, 0, sz, 0); ans += rid - i - 1; if (x > 0) ans++; add(i1, id + 1, 0, sz, 0); } 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...