Advertisement
tepyotin2

Binary Search

Jul 4th, 2025
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct Swap{
  6.     int a, b;
  7. };
  8.  
  9. int t;
  10.  
  11. void solve(){
  12.     int n, x;
  13.     cin >> n >> x;
  14.     // cout << "n: " << n << ", x: " << x << '\n';
  15.     vector<int> perm(n+1);
  16.     vector<Swap> sw;
  17.     int pos_x = -1;
  18.     for(int i=1; i<=n; i++){
  19.         cin >> perm[i];
  20.         if(perm[i] == x){
  21.             pos_x = i;
  22.         }
  23.     }
  24.     // for(int i=1; i<=n; i++){
  25.     //     if(perm[i] == x){
  26.     //         pos_x = i;
  27.     //     }
  28.     // }
  29.     int l = 1;
  30.     int r = n+1;
  31.     while(r-l>1){
  32.         int m = (r+l)/2;
  33.         if(perm[m]<=x){
  34.             l = m;
  35.         }else{
  36.             r = m;
  37.         }
  38.     }
  39.     // cout << "l: " << l << ", r: " << r << '\n';
  40.     if(perm[l] == x){
  41.         cout << "0" << '\n';
  42.         return;
  43.     }
  44.     if(l != pos_x){
  45.         // cout << "HI" << '\n';
  46.         // cout << "l: " << l << ", " << pos_x << '\n';
  47.         sw.push_back({l, pos_x});
  48.         swap(perm[l], perm[pos_x]);
  49.     }
  50.     // for(int i=1; i<=n; i++){
  51.     //     cout << perm[i] << '\n';
  52.     // }
  53.     int nl = 1;
  54.     int nr = n+1;
  55.     while(nr-nl>1){
  56.         int m = (nr+nl)/2;
  57.         if(perm[m]<=x){
  58.             nl = m;
  59.         }else{
  60.             nr = m;
  61.         }
  62.     }
  63.     // cout << "nl: " << nl << ", nr: " << nr << '\n';
  64.     if(perm[nl] == x){
  65.         cout << sw.size() << '\n';
  66.         for(Swap v: sw){
  67.             cout << v.a << " " << v.b << '\n';
  68.         }
  69.         return;
  70.     }
  71.     for(int i=1; i<=n; i++){
  72.         if(i!=l && i!=pos_x && perm[i] == l){
  73.             sw.push_back({i, l});
  74.             cout << sw.size() << '\n';
  75.             for(Swap v: sw){
  76.                 cout << v.a << " " << v.b << '\n';
  77.             }
  78.             return;
  79.         }
  80.     }
  81. }
  82.  
  83. int main(){
  84.     // freopen("binarysearch.in", "r", stdin);
  85.  
  86.     cin >> t;
  87.     while(t--){
  88.         solve();
  89.     }
  90.  
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement