如题。
find
找的是第 i 个人收到了几次命令,由此从 chk
里找出最后接到的命令是第几次。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,k;
int a[N];
int chk(int x,int y){
int sum=0,mx=x*a[y];
for(int i=1;i<=n;i++){
sum+=mx/a[i];
if(i<y&&mx%a[i]==0) sum--;
if(sum>k) return -1;
}
if(sum>k) return -1;
return sum;
}
int find(int i){
int l=1,r=k,res=-1;
while(l<=r){
int mid=l+r>>1;
int tmp=chk(mid,i);
if(tmp!=-1) l=mid+1,res=tmp;
else r=mid-1;
}
return res;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>k>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cout<<find(i)<<" ";
return 0;
}