Submission #201412

#TimeUsernameProblemLanguageResultExecution timeMemory
201412khulegubArranging Shoes (IOI19_shoes)C++14
0 / 100
1107 ms1048580 KiB
#include "shoes.h" #include <bits/stdc++.h> #define mp make_pair #define pb push_back #define xx first #define yy second #define ll(x) (x*2) + 1 #define rr(x) (x*2) + 2 using namespace std; typedef long long i64; vector<int> tt; vector<int> st; void build(int l, int r, int ti){ if (l == r){ st[ti] = tt[l]; return; } int mid = (l + r) >> 1; build(l, mid - 1, ll(ti)); build(mid, r, rr(ti)); st[ti] = st[ll(ti)] + st[rr(ti)]; } void update(int ui, int l, int r, int ti){ if (l == r){ st[ti] = tt[l]; return; } int mid = (l + r) >> 1; if (ui >= l && ui <= mid - 1) build(l, mid - 1, ll(ti)); if (ui >= mid && ui <= r) build(mid, r, rr(ti)); st[ti] = st[ll(ti)] + st[rr(ti)]; } int query(int ql, int qr, int l, int r, int ti){ if (l > qr || r < ql) return 0; if (ql <= l && r <= qr){ return st[ti]; } int mid = (l + r) >> 1; return query(ql, qr, l, mid - 1, ll(ti)) + query(ql, qr, mid, r, rr(ti)); } i64 count_swaps(std::vector<int> s) { i64 ans = 0LL; int n = s.size(); tt.resize(n); st.resize(4 * n); build(0, n - 1, 0); vector<vector<int> > maap_l, maap_r; maap_l.resize(n + 1); maap_r.resize(n + 1); for (int i = n - 1; i >= 0; i--){ if (s[i] < 0) maap_l[s[i] * -1].pb(i); else maap_r[s[i]].pb(i); } vector<bool> taken(n, 0); for (int i = 0; i < n; i++){ int tmp; if (!taken[i]){ if (s[i] < 0){ maap_r[s[i]].pop_back(); tmp = maap_r[s[i]].back(); } else{ maap_l[s[i]].pop_back(); tmp = maap_l[s[i]].back(); } taken[tmp] = 1; if (s[i] < 0){ ans += tmp - i - 1; } else{ ans += tmp - i; } ans -= query(i, tmp, 0, n - 1, 0); tt[tmp]++; update(tmp, 0, n - 1, 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...