#include <functional>
#include<vector>
#include <iostream>
#include<queue>
using namespace std;
const int N=1e5+10;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,k;
cin>>n>>k;
priority_queue<int,vector<int>,greater<int>> p;
for(int i=0;i<n;i++){
int l;
cin>>l;
p.push(l);
}
int sum=0;
int tem=p.top();
while(tem<=k){
sum++;
k-=tem;
p.pop();
p.push(2*tem);
tem=p.top();
}
cout<<sum;
return 0;
}
用小根堆处理找动态最值的问题

京公网安备 11010502036488号