Submission #1146631

#TimeUsernameProblemLanguageResultExecution timeMemory
1146631minggaArranging Shoes (IOI19_shoes)C++20
100 / 100
133 ms27032 KiB
#include "bits/stdc++.h" #include "shoes.h" using namespace std; #define ln "\n" #define pb push_back #define fi first #define se second #define all(x) (x).begin(), (x).end() #define sz(x) ((int)(x).size()) #define ll long long const int mod = 1e9 + 7; // const int inf = 2e18; const int N = 2e5 + 7; struct BIT { vector<ll> bit; int n; BIT() {} BIT(int n) : n(n) { bit.resize(n + 1, 0); } void update(int u, ll x) { for(u; u <= n; u += (u & -u)) bit[u] += x; } int get(int u) { ll ans = 0; for(u; u > 0; u -= (u & -u)) ans += bit[u]; return ans; } int get(int l, int r) { return get(r) - get(l - 1); } }; vector<int> d[N]; vector<int> lef[N], rig[N]; bool cmp(vector<int> a, vector<int> b) { return min(a[0], a[1]) < min(b[0], b[1]); } long long count_swaps(std::vector<int> s) { for(int i = 0; i < sz(s); i++) { if(s[i] < 0) { lef[-s[i]].pb(i + 1); } else { rig[s[i]].pb(i + 1); } } int n = sz(s) / 2; int c = 0; for(int i = 1; i <= n; i++) { for(int j = 0; j < sz(lef[i]); j++) { d[++c].pb(rig[i][j]); d[c].pb(lef[i][j]); } } sort(d + 1, d + c + 1, cmp); BIT bit = BIT(sz(s) + 1); ll ans = 0; for(int i = 1; i <= c; i++) { for(int j = 1; j >= 0; j--) { ll pos = i * 2 - j; ll sus = d[i][j] + bit.get(d[i][j] + 1, sz(s)); bit.update(d[i][j], 1); ans += abs(sus - pos); } } 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...