Submission #1230413

#TimeUsernameProblemLanguageResultExecution timeMemory
1230413altern23Arranging Shoes (IOI19_shoes)C++20
0 / 100
0 ms324 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; #define ll long long struct BIT{ ll N; vector<ll> bit; BIT(ll _n){ N = _n; bit.resize(N + 5); } void upd(ll idx, ll val){ idx++; for(; idx <= N; idx += idx & -idx) bit[idx] += val; } ll get(ll idx){ idx++; ll ans = 0; for(; idx >= 1; idx -= idx & -idx) ans += bit[idx]; return ans; } ll query(ll l, ll r) { return get(r) - get(l - 1); } }; long long count_swaps(vector<int> s) { int N = (int)s.size() / 2; vector<int> kiri(N + 5), kanan(N + 5); for(int i = 0; i < 2 * N; i++){ if(s[i] < 0) kiri[abs(s[i])] = i; else kanan[s[i]] = i; } vector<int> vis(N + 5); int ans = 0; BIT bit(2 * N); for(int i = 0; i < 2 * N; i++) bit.upd(i, 1); for(int i = 0; i < 2 * N; i++){ if(s[i] < 0) continue; if(vis[abs(s[i])]) continue; ans += abs(bit.get(kanan[abs(s[i])]) - bit.get(kiri[abs(s[i])])); vis[abs(s[i])] = 1; if(kiri[s[i]] < i){ bit.upd(kiri[s[i]] + 1, 1); bit.upd(i, -1); } else{ bit.upd(i + 1, -1); bit.upd(kiri[s[i]] + 1, 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...