Submission details
Task:Pair sort
Sender:aalto25d_005
Submission time:2025-09-24 16:41:01 +0300
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.01 sdetails
#5ACCEPTED0.01 sdetails
#6ACCEPTED0.01 sdetails
#7ACCEPTED0.01 sdetails
#8ACCEPTED0.01 sdetails
#9ACCEPTED0.01 sdetails
#10ACCEPTED0.01 sdetails
#11ACCEPTED0.01 sdetails
#12ACCEPTED0.01 sdetails
#13ACCEPTED0.01 sdetails
#14ACCEPTED0.01 sdetails

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:50:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |   for (int i = 0; i < ans.size(); i++) {
      |                   ~~^~~~~~~~~~~~

Code

#include <iostream>
#include <set>
#include <vector>

using namespace std;

const int N = 1e5 + 5;

int n;
int a[2 * N];
set<int> pos[N];
vector<pair<int, int> > ans;

void _swap(int u, int v) {
  ans.emplace_back(u, v);
  int val_u = a[u];
  pos[val_u].erase(u);
  pos[val_u].insert(v);
  int val_v = a[v];
  pos[val_v].erase(v);
  pos[val_v].insert(u);
  swap(a[u], a[v]);
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  for (int i = 1; i <= 2 * n; i++) {
    cin >> a[i];
    pos[a[i]].insert(i);
  }
  for (int i = 1; i <= n - 1; i++) {
    int fi = *pos[i].begin();
    int se = *pos[i].rbegin();
    if (fi + 1 == se && fi & 1) {
      continue;
    }
    if (fi & 1) {
      _swap(se, fi + 1);
    } else if (se & 1) {
      _swap(fi, se + 1);
    } else if (fi % 2 == 0) {
      _swap(se, fi - 1);
    } else {
      _swap(fi, se - 1);
    }
  }
  cout << ans.size() << '\n';
  for (int i = 0; i < ans.size(); i++) {
    cout << ans[i].first << ' ' << ans[i].second << '\n';
  }
  return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
5
3 2 4 5 1 3 2 1 4 5 

correct output
3
2 6
4 9
6 8

user output
3
8 6
2 8
9 4

Test 2

Verdict: ACCEPTED

input
5
3 2 4 5 1 3 2 1 4 5 

correct output
3
2 6
4 9
6 8

user output
3
8 6
2 8
9 4

Test 3

Verdict: ACCEPTED

input
10
3 6 6 8 8 9 9 1 4 5 2 4 10 2 1...

correct output
9
2 17
4 17
6 17
8 17
...

user output
9
8 16
14 12
17 2
14 10
...

Test 4

Verdict: ACCEPTED

input
10
3 6 6 8 8 9 9 1 4 5 2 4 10 2 1...

correct output
9
2 17
4 17
6 17
8 17
...

user output
9
8 16
14 12
17 2
14 10
...

Test 5

Verdict: ACCEPTED

input
50
47 26 6 35 13 18 9 19 14 50 34...

correct output
48
2 87
4 78
6 71
8 55
...

user output
48
90 47
14 36
96 94
58 64
...
Truncated

Test 6

Verdict: ACCEPTED

input
50
47 26 6 35 13 18 9 19 14 50 34...

correct output
48
2 87
4 78
6 71
8 55
...

user output
48
90 47
14 36
96 94
58 64
...
Truncated

Test 7

Verdict: ACCEPTED

input
100
56 26 6 35 60 72 9 55 83 51 58...

correct output
97
2 77
4 108
6 141
8 55
...

user output
97
90 47
14 132
96 94
200 102
...
Truncated

Test 8

Verdict: ACCEPTED

input
100
56 26 6 35 60 72 9 55 83 51 58...

correct output
97
2 77
4 108
6 141
8 55
...

user output
97
90 47
14 132
96 94
200 102
...
Truncated

Test 9

Verdict: ACCEPTED

input
500
56 146 351 35 281 235 354 449 ...

correct output
497
2 758
4 820
6 125
8 243
...

user output
497
622 874
14 636
850 526
674 980
...
Truncated

Test 10

Verdict: ACCEPTED

input
500
56 146 351 35 281 235 354 449 ...

correct output
497
2 758
4 820
6 125
8 243
...

user output
497
622 874
14 636
850 526
674 980
...
Truncated

Test 11

Verdict: ACCEPTED

input
1000
603 596 351 885 530 235 354 56...

correct output
993
2 256
4 1534
6 816
8 1057
...

user output
993
1614 1704
1842 636
1785 1164
674 980
...
Truncated

Test 12

Verdict: ACCEPTED

input
1000
603 596 351 885 530 235 354 56...

correct output
993
2 256
4 1534
6 816
8 1057
...

user output
993
1614 1704
1842 636
1785 1164
674 980
...
Truncated

Test 13

Verdict: ACCEPTED

input
5000
1594 596 1797 3776 1201 235 35...

correct output
4993
2 1548
4 9062
6 6397
8 8296
...

user output
4993
6211 5182
3180 1841
4169 2144
9276 7595
...
Truncated

Test 14

Verdict: ACCEPTED

input
5000
1594 596 1797 3776 1201 235 35...

correct output
4993
2 1548
4 9062
6 6397
8 8296
...

user output
4993
6211 5182
3180 1841
4169 2144
9276 7595
...
Truncated