Submission #1141244

#TimeUsernameProblemLanguageResultExecution timeMemory
1141244altern23Arranging Shoes (IOI19_shoes)C++20
30 / 100
39 ms13740 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; #define ll long long struct fenwick{ ll n; vector<ll>bit; fenwick(ll _n = 0) : n(_n), bit(n + 5) {} void upd(ll idx, ll val){ idx++; for(int i = idx; i <= n; i += i & -i) bit[i] += val; } ll get(ll idx){ idx++; ll ans = 0; for(int i = idx; i >= 1; i -= i & -i) ans += bit[i]; return ans; } ll query(ll l, ll r){ if(l > r) return 0; return get(r) - get(l - 1); } }; long long count_swaps(vector<int> s) { ll n = s.size(); vector<pair<ll, ll>> isi[n + 5]; for(int i = 0; i < n; i++){ isi[abs(s[i])].push_back({i, s[i]}); } fenwick bit(n); vector<ll> a(n + 5); ll ans = 0; vector<pair<ll, ll>> segs; for(ll i = 1; i <= n; i++){ deque<ll> pos, neg; ll nxt = 0; for(auto [idx, val] : isi[i]){ if(val < 0){ if(!pos.empty()){ a[idx] = nxt; a[pos.front()] = nxt + 1; nxt += 2; pos.pop_front(); } else{ neg.push_back(idx); } } else{ if(!neg.empty()){ a[idx] = nxt + 1; a[neg.front()] = nxt; nxt += 2; neg.pop_front(); } else{ pos.push_back(idx); } } } } for(int i = 0; i < n; i++){ ans += bit.query(a[i] + 1, n - 1); bit.upd(a[i], 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...