Submission #1230461

#TimeUsernameProblemLanguageResultExecution timeMemory
1230461altern23Arranging 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]; vector<int> vis(2 * N + 5); int ans = 0; BIT bit(2 * N); for(int i = 1; i < 2 * N; i++) bit.upd(i, 1); for(int i = 0; i < 2 * N; i++){ if(vis[i]) continue; if(s[i] < 0){ if(!kanan[abs(s[i])].size()){ kiri[abs(s[i])].push_back(i); continue; } ans += abs(bit.get(i) - bit.get(kanan[abs(s[i])].back())) - 1; vis[i] = 1, vis[kanan[abs(s[i])].back()] = 1; bit.upd(kanan[abs(s[i])].back(), 1); bit.upd(i, -1); kanan[abs(s[i])].pop_back(); } else{ if(!kiri[abs(s[i])].size()){ kanan[abs(s[i])].push_back(i); continue; } ans += abs(bit.get(i) - bit.get(kiri[abs(s[i])].back())); vis[i] = 1, vis[kiri[abs(s[i])].back()] = 1; bit.upd(kiri[abs(s[i])].back(), 1); bit.upd(i, -1); kiri[abs(s[i])].pop_back(); } } 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...