#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |