#include "shoes.h"
#include <bits/stdc++.h>
#include <cstdio>
#include <cassert>
#define all(x) x.begin(),x.end()
#define lowbit(x) x&(-x)
using namespace std;
const int NMAX = 4e5+2;
vector<int> fenwick(NMAX);
inline void add(int k, int v){
if(k <= 0) return;
while(k < NMAX){
fenwick[k] += v;
k += lowbit(k);
}
}
inline int read(int k){
int sum = 0;
while(k > 0){
sum+=fenwick[k];
k -= lowbit(k);
}
return sum;
}
long long count_swaps(std::vector<int> s) {
int n = (int)s.size();
if(n <= 16){
vector<int> neg;
for(int i = 0; i < n; i++){
if(s[i] < 0){
neg.push_back(i);
}
}
const int MAX = 16;
bitset<MAX> mark;
int ans = INT32_MAX;
do{
mark.reset();
vector<int> ar(n);
int aux = 0;
for(int i = 0; i < n/2; i++){
ar[aux] = neg[i];
for(int j = 0; j < n; j++){
if(mark[j] == false and s[j] == -s[ar[aux]]){
ar[aux+1] = j;
mark[j] = true;
break;
}
}
aux += 2;
}
vector<int> pos(n), num(n);
for(int i = 0; i < n; i++) pos[i] = num[i] = i;
int swp = 0;
for(int i = 0; i < n; i++){
swp += abs(i-pos[ar[i]]);
if(pos[ar[i]] < i){
for(int j = pos[ar[i]]+1; j <= i; j++){
pos[ num[j] ]--;
}
pos[ ar[i] ] = i;
}
if(i < pos[ar[i]]){
for(int j = pos[ar[i]]-1; j >= i; j--){
pos[num[j]]++;
}
pos[ ar[i] ] = i;
}
for(int i = 0; i < n; i++) num[pos[i]] = i;
}
ans = min(ans,swp);
}while(next_permutation(all(neg)));
return ans;
}
else{
queue<int> neg, pos;
for(int i = 0; i < n; i++){
if(s[i] < 0) neg.push(i);
else pos.push(i);
}
vector<int> ar(n);
for(int i = 0; i < n-1; i+=2){
ar[i] = neg.front(); neg.pop();
ar[i+1] = pos.front(); pos.pop();
}
for(int i = 2; i <= n; i++) add(i,1);
/*cout << "this is the arr: \n";
for(int i = 0; i < n; i++) cout << ar[i] << " ";
cout << "\n";*/
int l = 0, r = n-1;
int swp = 0;
while(l < r){
int position = read(ar[l]+1);
//cout << "L: " << l << " num of the ar: " << ar[l] << " position: " << position << "\n";
swp += abs(position-l);
add(l+1,1);
add(position+1,-1);
l++;
position = read(ar[r]+1);
//cout << "R: " << r << " num of the ar: " << ar[r] << " position: " << position << "\n";
swp += abs(position-r);
add(r+2,1);
add(position+1,-1);
r--;
}
return swp;
}
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
1876 KB |
Output is correct |
2 |
Correct |
1 ms |
1876 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
1876 KB |
Output is correct |
2 |
Correct |
1 ms |
1876 KB |
Output is correct |
3 |
Correct |
1 ms |
1876 KB |
Output is correct |
4 |
Correct |
1 ms |
1876 KB |
Output is correct |
5 |
Correct |
1 ms |
1876 KB |
Output is correct |
6 |
Correct |
1 ms |
1880 KB |
Output is correct |
7 |
Correct |
1 ms |
1876 KB |
Output is correct |
8 |
Correct |
1 ms |
1880 KB |
Output is correct |
9 |
Correct |
1 ms |
1876 KB |
Output is correct |
10 |
Correct |
1 ms |
1876 KB |
Output is correct |
11 |
Correct |
1 ms |
1876 KB |
Output is correct |
12 |
Correct |
1 ms |
1876 KB |
Output is correct |
13 |
Correct |
1 ms |
1876 KB |
Output is correct |
14 |
Correct |
1 ms |
1876 KB |
Output is correct |
15 |
Correct |
1 ms |
1880 KB |
Output is correct |
16 |
Correct |
1 ms |
1876 KB |
Output is correct |
17 |
Correct |
1 ms |
1876 KB |
Output is correct |
18 |
Correct |
2 ms |
1876 KB |
Output is correct |
19 |
Correct |
1 ms |
1876 KB |
Output is correct |
20 |
Correct |
1 ms |
1876 KB |
Output is correct |
21 |
Correct |
1 ms |
1876 KB |
Output is correct |
22 |
Correct |
1 ms |
1876 KB |
Output is correct |
23 |
Correct |
1 ms |
1876 KB |
Output is correct |
24 |
Correct |
2 ms |
1876 KB |
Output is correct |
25 |
Correct |
6 ms |
1876 KB |
Output is correct |
26 |
Correct |
47 ms |
1748 KB |
Output is correct |
27 |
Correct |
47 ms |
1856 KB |
Output is correct |
28 |
Correct |
47 ms |
1876 KB |
Output is correct |
29 |
Correct |
43 ms |
1748 KB |
Output is correct |
30 |
Correct |
45 ms |
1748 KB |
Output is correct |
31 |
Correct |
44 ms |
1876 KB |
Output is correct |
32 |
Correct |
45 ms |
1748 KB |
Output is correct |
33 |
Correct |
47 ms |
1856 KB |
Output is correct |
34 |
Correct |
48 ms |
1748 KB |
Output is correct |
35 |
Correct |
45 ms |
1748 KB |
Output is correct |
36 |
Correct |
46 ms |
1864 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
1876 KB |
Output is correct |
2 |
Correct |
1 ms |
1876 KB |
Output is correct |
3 |
Correct |
1 ms |
1876 KB |
Output is correct |
4 |
Correct |
1 ms |
1876 KB |
Output is correct |
5 |
Correct |
1 ms |
1872 KB |
Output is correct |
6 |
Correct |
1 ms |
1876 KB |
Output is correct |
7 |
Correct |
1 ms |
1876 KB |
Output is correct |
8 |
Correct |
1 ms |
1876 KB |
Output is correct |
9 |
Correct |
1 ms |
1876 KB |
Output is correct |
10 |
Correct |
1 ms |
1876 KB |
Output is correct |
11 |
Correct |
1 ms |
1876 KB |
Output is correct |
12 |
Correct |
1 ms |
1876 KB |
Output is correct |
13 |
Correct |
44 ms |
1748 KB |
Output is correct |
14 |
Incorrect |
1 ms |
1884 KB |
Output isn't correct |
15 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
1880 KB |
Output is correct |
2 |
Correct |
1 ms |
1876 KB |
Output is correct |
3 |
Correct |
1 ms |
1876 KB |
Output is correct |
4 |
Correct |
1 ms |
1880 KB |
Output is correct |
5 |
Incorrect |
35 ms |
6352 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
1876 KB |
Output is correct |
2 |
Correct |
1 ms |
1876 KB |
Output is correct |
3 |
Correct |
1 ms |
1876 KB |
Output is correct |
4 |
Correct |
1 ms |
1876 KB |
Output is correct |
5 |
Correct |
1 ms |
1876 KB |
Output is correct |
6 |
Correct |
1 ms |
1880 KB |
Output is correct |
7 |
Correct |
1 ms |
1876 KB |
Output is correct |
8 |
Correct |
1 ms |
1880 KB |
Output is correct |
9 |
Correct |
1 ms |
1876 KB |
Output is correct |
10 |
Correct |
1 ms |
1876 KB |
Output is correct |
11 |
Correct |
1 ms |
1876 KB |
Output is correct |
12 |
Correct |
1 ms |
1876 KB |
Output is correct |
13 |
Correct |
1 ms |
1876 KB |
Output is correct |
14 |
Correct |
1 ms |
1876 KB |
Output is correct |
15 |
Correct |
1 ms |
1880 KB |
Output is correct |
16 |
Correct |
1 ms |
1876 KB |
Output is correct |
17 |
Correct |
1 ms |
1876 KB |
Output is correct |
18 |
Correct |
2 ms |
1876 KB |
Output is correct |
19 |
Correct |
1 ms |
1876 KB |
Output is correct |
20 |
Correct |
1 ms |
1876 KB |
Output is correct |
21 |
Correct |
1 ms |
1876 KB |
Output is correct |
22 |
Correct |
1 ms |
1876 KB |
Output is correct |
23 |
Correct |
1 ms |
1876 KB |
Output is correct |
24 |
Correct |
2 ms |
1876 KB |
Output is correct |
25 |
Correct |
6 ms |
1876 KB |
Output is correct |
26 |
Correct |
47 ms |
1748 KB |
Output is correct |
27 |
Correct |
47 ms |
1856 KB |
Output is correct |
28 |
Correct |
47 ms |
1876 KB |
Output is correct |
29 |
Correct |
43 ms |
1748 KB |
Output is correct |
30 |
Correct |
45 ms |
1748 KB |
Output is correct |
31 |
Correct |
44 ms |
1876 KB |
Output is correct |
32 |
Correct |
45 ms |
1748 KB |
Output is correct |
33 |
Correct |
47 ms |
1856 KB |
Output is correct |
34 |
Correct |
48 ms |
1748 KB |
Output is correct |
35 |
Correct |
45 ms |
1748 KB |
Output is correct |
36 |
Correct |
46 ms |
1864 KB |
Output is correct |
37 |
Incorrect |
1 ms |
1876 KB |
Output isn't correct |
38 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
1876 KB |
Output is correct |
2 |
Correct |
1 ms |
1876 KB |
Output is correct |
3 |
Correct |
1 ms |
1876 KB |
Output is correct |
4 |
Correct |
1 ms |
1876 KB |
Output is correct |
5 |
Correct |
1 ms |
1876 KB |
Output is correct |
6 |
Correct |
1 ms |
1880 KB |
Output is correct |
7 |
Correct |
1 ms |
1876 KB |
Output is correct |
8 |
Correct |
1 ms |
1880 KB |
Output is correct |
9 |
Correct |
1 ms |
1876 KB |
Output is correct |
10 |
Correct |
1 ms |
1876 KB |
Output is correct |
11 |
Correct |
1 ms |
1876 KB |
Output is correct |
12 |
Correct |
1 ms |
1876 KB |
Output is correct |
13 |
Correct |
1 ms |
1876 KB |
Output is correct |
14 |
Correct |
1 ms |
1876 KB |
Output is correct |
15 |
Correct |
1 ms |
1880 KB |
Output is correct |
16 |
Correct |
1 ms |
1876 KB |
Output is correct |
17 |
Correct |
1 ms |
1876 KB |
Output is correct |
18 |
Correct |
2 ms |
1876 KB |
Output is correct |
19 |
Correct |
1 ms |
1876 KB |
Output is correct |
20 |
Correct |
1 ms |
1876 KB |
Output is correct |
21 |
Correct |
1 ms |
1876 KB |
Output is correct |
22 |
Correct |
1 ms |
1876 KB |
Output is correct |
23 |
Correct |
1 ms |
1876 KB |
Output is correct |
24 |
Correct |
2 ms |
1876 KB |
Output is correct |
25 |
Correct |
6 ms |
1876 KB |
Output is correct |
26 |
Correct |
47 ms |
1748 KB |
Output is correct |
27 |
Correct |
47 ms |
1856 KB |
Output is correct |
28 |
Correct |
47 ms |
1876 KB |
Output is correct |
29 |
Correct |
43 ms |
1748 KB |
Output is correct |
30 |
Correct |
45 ms |
1748 KB |
Output is correct |
31 |
Correct |
44 ms |
1876 KB |
Output is correct |
32 |
Correct |
45 ms |
1748 KB |
Output is correct |
33 |
Correct |
47 ms |
1856 KB |
Output is correct |
34 |
Correct |
48 ms |
1748 KB |
Output is correct |
35 |
Correct |
45 ms |
1748 KB |
Output is correct |
36 |
Correct |
46 ms |
1864 KB |
Output is correct |
37 |
Correct |
1 ms |
1876 KB |
Output is correct |
38 |
Correct |
1 ms |
1876 KB |
Output is correct |
39 |
Correct |
1 ms |
1872 KB |
Output is correct |
40 |
Correct |
1 ms |
1876 KB |
Output is correct |
41 |
Correct |
1 ms |
1876 KB |
Output is correct |
42 |
Correct |
1 ms |
1876 KB |
Output is correct |
43 |
Correct |
1 ms |
1876 KB |
Output is correct |
44 |
Correct |
1 ms |
1876 KB |
Output is correct |
45 |
Correct |
1 ms |
1876 KB |
Output is correct |
46 |
Correct |
1 ms |
1876 KB |
Output is correct |
47 |
Correct |
44 ms |
1748 KB |
Output is correct |
48 |
Incorrect |
1 ms |
1884 KB |
Output isn't correct |
49 |
Halted |
0 ms |
0 KB |
- |