Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct Swap{
- int a, b;
- };
- int t;
- void solve(){
- int n, x;
- cin >> n >> x;
- // cout << "n: " << n << ", x: " << x << '\n';
- vector<int> perm(n+1);
- vector<Swap> sw;
- int pos_x = -1;
- for(int i=1; i<=n; i++){
- cin >> perm[i];
- if(perm[i] == x){
- pos_x = i;
- }
- }
- // for(int i=1; i<=n; i++){
- // if(perm[i] == x){
- // pos_x = i;
- // }
- // }
- int l = 1;
- int r = n+1;
- while(r-l>1){
- int m = (r+l)/2;
- if(perm[m]<=x){
- l = m;
- }else{
- r = m;
- }
- }
- // cout << "l: " << l << ", r: " << r << '\n';
- if(perm[l] == x){
- cout << "0" << '\n';
- return;
- }
- if(l != pos_x){
- // cout << "HI" << '\n';
- // cout << "l: " << l << ", " << pos_x << '\n';
- sw.push_back({l, pos_x});
- swap(perm[l], perm[pos_x]);
- }
- // for(int i=1; i<=n; i++){
- // cout << perm[i] << '\n';
- // }
- int nl = 1;
- int nr = n+1;
- while(nr-nl>1){
- int m = (nr+nl)/2;
- if(perm[m]<=x){
- nl = m;
- }else{
- nr = m;
- }
- }
- // cout << "nl: " << nl << ", nr: " << nr << '\n';
- if(perm[nl] == x){
- cout << sw.size() << '\n';
- for(Swap v: sw){
- cout << v.a << " " << v.b << '\n';
- }
- return;
- }
- for(int i=1; i<=n; i++){
- if(i!=l && i!=pos_x && perm[i] == l){
- sw.push_back({i, l});
- cout << sw.size() << '\n';
- for(Swap v: sw){
- cout << v.a << " " << v.b << '\n';
- }
- return;
- }
- }
- }
- int main(){
- // freopen("binarysearch.in", "r", stdin);
- cin >> t;
- while(t--){
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement