思路:二分答案O(logn),判断O(n),总的复杂度O(nlogn)
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <vector>
#include <queue>
#include <set>
using namespace std;
#define _for(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define _rep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define pb push_back
#define IOS ios::sync_with_stdio(false)
//#define int long long
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
typedef long long ll;
const int N=1e5+2;
int n,m;
bool check(int mid)
{
ll res=0;
_for(i,1,n)
{
res += mid;
mid = ceil(1.0*mid/2);
}
return res <= m;
}
void solve()
{
int l=1,r=m;
while( l<=r )
{
int mid=(l+r)>>1;
if( check(mid) ) l=mid+1;
else r=mid-1;
}
cout<<r<<endl;
}
signed main()
{
///!!!
// freopen("data.txt","r",stdin);
//!!!
IOS;
cin>>n>>m;
solve();
}