#include "shoes.h"
#include <iostream>
#include <bits/stdc++.h>
#define fi first
#define se second
typedef long long ll;
using namespace std;
int inf = 1e9 + 7;
int n;
struct segtree {
int sz = 1;
vector<ll> tree;
void init() {
while (sz < n) {
sz <<= 1;
}
tree.resize(sz * 2 - 1);
build(0,0,sz);
}
void build(int v, int l, int r) {
if (r - l == 1) {
if (l < n) {
tree[v] = 1;
}
return;
}
int m = (l + r) / 2;
build(v * 2 + 1, l, m);
build(v * 2 + 2, m, r);
tree[v] = tree[v * 2 + 1] + tree[v * 2 + 2];
}
void update(int ind, int newq) {
upd(0,0,sz,ind,newq);
}
void upd(int v, int l, int r, int ind, int newq) {
if (r - l == 1) {
tree[v] = newq;
return;
}
int m = (l + r) / 2;
if (ind < m) {
upd(v * 2 + 1, l, m, ind, newq);
} else {
upd(v * 2 + 2, m, r, ind, newq);
}
tree[v] = tree[v * 2 + 1] + tree[v * 2 + 2];
}
ll answer(int lq, int rq) {
return ans(0,0,sz,lq,rq);
}
ll ans(int v, int l, int r, int lq, int rq) {
if (lq <= l && r <= rq) {
return tree[v];
}
if (lq >= r || rq <= l) {
return 0;
}
int m = (l + r) / 2;
ll a1 = ans(v * 2 + 1, l, m, lq, rq),
a2 = ans(v * 2 + 2, m, r, lq, rq);
return a1 + a2;
}
};
long long count_swaps(vector<int> s) {
n = s.size();
vector<int> pa(n);
map<int, set<int>> mp;
for (int i = 0; i < n; i++) {
int val = s[i];
if (mp.find(-val) == mp.end()) {
mp[val].insert(i);
} else {
pa[*mp[-val].begin()] = i;
mp[-val].erase(mp[-val].begin());
if(mp[-val].empty()) {
mp.erase(-val);
}
}
}
segtree tree;
tree.init();
ll res = 0;
for (int i = 0; i < n; i++) {
if (tree.answer(i, i + 1) == 0) {
continue;
}
if (s[i] > 0) {
res++;
}
res += tree.answer(i + 1, pa[i]);
tree.update(pa[i], 0);
tree.update(i, 0);
}
return res;
}
/*
signed main() {
int n;
cin >> n;
vector<int> s(2 * n);
for (int i = 0; i < 2 * n; i++) {
cin >> s[i];
}
int res = count_swaps(s);
cout << res << endl;
}*/
# | 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... |