Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll int64_t
- #define fr(i,a,b) for(ll i=a;i <= b;i++)
- #define fd(i,a,b) for(ll i=a;i >= b;i--)
- #define rep(i,n) for(ll i=0;i < n;i++)
- #define fast_io ios_base::sync_with_stdio(0);
- #define sz(x) x.size()
- #define pll pair<ll,ll>
- #define mp make_pair
- #define fir first
- #define sec second
- #include <stdint.h>
- ll n,k;
- void move(ll & ind,ll a,ll b) {
- ll temp = ind,mid = (a+b)/2ll;
- if(temp <= mid) {
- temp = a + (temp-a)*2ll;
- }
- else {
- temp = a + 1ll + (temp-mid-1ll)*2ll;
- }
- ind = temp;
- }
- pll find(ll ind,ll i) {
- ind += 1ll;
- ll lo = 1ll,hi = (1ll << i);
- while(lo < hi) {
- ll mid = (lo+hi)/2ll;
- if(mid * (1ll << (n-i)) >= ind) hi = mid;
- else lo = mid+1ll;
- }
- ll f = (lo-1ll) * (1ll << (n-i)),s = (1ll << (n-i))-1ll;
- pll ret = mp(f,f + s);
- }
- int main() {
- fast_io;
- ll t; cin >> t;
- rep(q,t) {
- cin >> n >> k;
- ll ind = k;
- fd(i,n-1,0) {
- pll temp = find(ind,i);
- move(ind,temp.fir,temp.sec);
- }
- cout << ind << endl;
- }
- }
Add Comment
Please, Sign In to add comment