二分除2结果的最小值

#include<bits/stdc++.h>
#define int long long
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
typedef long long ll;
void work()
{
    int n;cin>>n;
    vector<int> a(n+1);
    for(int i=1;i<=n;i++)
        cin>>a[i];
    
    int l = 0;
    int r = 1e9+7;
    auto check  = [&](int k) ->bool
    {
        vector<int> t = a;
        for(int i=1;i<=n;i++)
        {
            while(t[i]>k)
                t[i]/=2;
        }
        for(int i=2;i<=n;i++)
            if(t[i]!=t[i-1])
                return false;
        return true;
    };
    int ans = 0;
    while(l<=r)
    {
        int mid = (l+r)/2;
        if(check(mid))
            l = mid+1,ans = mid;
        else
            r = mid-1;
    }
    int cnt = 0;
    for(int i=1;i<=n;i++)
    {
        while(a[i]>ans)
            a[i]/=2,cnt++;
    }
    cout<<cnt;
}


signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
//    int t=1;
//    cin>>t;
//    while(t--)
        work();
    return 0;
}