euler_1998

Untitled

Aug 26th, 2017
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.02 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll int64_t
  4. #define fr(i,a,b) for(ll i=a;i <= b;i++)
  5. #define fd(i,a,b) for(ll i=a;i >= b;i--)
  6. #define rep(i,n) for(ll i=0;i < n;i++)
  7. #define fast_io ios_base::sync_with_stdio(0);
  8. #define sz(x) x.size()
  9. #define pll pair<ll,ll>
  10. #define mp make_pair
  11. #define fir first
  12. #define sec second
  13. #include <stdint.h>
  14.  
  15. ll n,k;
  16.  
  17. void move(ll & ind,ll a,ll b) {
  18.     ll temp = ind,mid = (a+b)/2ll;
  19.     if(temp <= mid) {
  20.         temp = a + (temp-a)*2ll;
  21.     }
  22.     else {
  23.         temp = a + 1ll + (temp-mid-1ll)*2ll;
  24.     }
  25.     ind = temp;
  26. }
  27.  
  28. pll find(ll ind,ll i) {
  29.     ind += 1ll;
  30.     ll lo = 1ll,hi = (1ll << i);
  31.     while(lo < hi) {
  32.         ll mid = (lo+hi)/2ll;
  33.         if(mid * (1ll << (n-i)) >= ind) hi = mid;
  34.         else lo = mid+1ll;
  35.     }
  36.     ll f = (lo-1ll) * (1ll << (n-i)),s = (1ll << (n-i))-1ll;
  37.     pll ret = mp(f,f + s);
  38. }
  39.  
  40. int main() {
  41.     fast_io;
  42.     ll t; cin >> t;
  43.     rep(q,t) {
  44.         cin >> n >> k;
  45.         ll ind = k;
  46.         fd(i,n-1,0) {
  47.             pll temp = find(ind,i);
  48.             move(ind,temp.fir,temp.sec);
  49.         }
  50.         cout << ind << endl;
  51.     }
  52. }
Add Comment
Please, Sign In to add comment