#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
set<int> wrong_pos;
vector<vector<int>> positive(100001);
vector<vector<int>> negative(100001);
void create_adj(vector<int> &S){
for(int i = 0; i < S.size(); i++){
if(i % 2 == 0 && S[i] < 0){
if(S[i+1] == abs(S[i])){
}
else{
wrong_pos.insert(abs(S[i]));
negative[abs(S[i])].push_back(i);
}
}
else if(i%2 == 0 && S[i] > 0){
wrong_pos.insert(abs(S[i]));
positive[abs(S[i])].push_back(i);
}
else if(i % 2 != 0 && S[i] > 0){
if(S[i-1] < 0 && abs(S[i-1]) == S[i]){
}
else{
wrong_pos.insert(abs(S[i]));
positive[abs(S[i])].push_back(i);
}
}
else if(i % 2 != 0 && S[i] < 0){
wrong_pos.insert(abs(S[i]));
negative[abs(S[i])].push_back(i);
}
}
}
int count_swaps(vector<int> S){
create_adj(S);
int swaps = 0;
for(auto err:wrong_pos){
for(int i = 0; i < positive[err].size(); i ++){
if(positive[err][i] < negative[err][i]){
swaps += abs(positive[err][i]-negative[err][i]);
}
else{
swaps += abs(positive[err][i]-negative[err][i])-1;
}
}
}
return swaps;
}
# | 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... |