有n个人在排队办事,每个人都有一个办事时间t—i,每个人的烦躁度等于前面人办事时间之和
现在有一个办事时间为tc的人想要插队,管理员的忍耐度为Q,插队前所有人的最小烦躁度为s1
,插队后为s2,如果满足s2-s1<=Q则可以插队,问想插队的人最早可以办事的时间;
```
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
long int t[100010];
long int n,q,tc,sum=0,Q;
bool check(int x)
{
long int num=(n-x)*tc;
if(num<=Q) return true;//则还可以往前插队
else return false;//插队位置只能在后面了
}
int main()
{
cin>>n>>q>>tc;
for(int i=1;i<=n;i)
{
scanf(“%ld”,&t[i]);
}
sort(t+1,t+1+n);//将办事时间少的人排在最前面可以使总烦躁度最小
for(int i=1;i<=n;i)
{
t[i]+=t[i-1];
sum+=t[i];
}
while(q–)
{
cin>>Q;
int l=0,r=1e5;
while(l[HTML_REMOVED]>1;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<t[l]+tc<<endl;
}
return 0;
}```