ABC334D 题解
思路
考虑贪心。
因为要求能拉的数量尽量多,所以从小到大排序,选择尽量小的。
前缀和排序后的数组,然后二分查找最后一个小于等于
介绍一个 STL 神器:upper_bound
。
使用方法:upper_bound(a.begin,a.end,q)-a
。
在
而我们要求的是第一个小于等于
该函数时间复杂度
#include<iostream>
#include<algorithm>
using namespace std;
long long a[200005],sum[200005],q;
int n,k;
int main() {
cin>>n>>k;
for(int i=1; i<=n; i++) {
cin>>a[i];
}
sort(a+1,a+n+1);
for(int i=1; i<=n; i++)sum[i]=sum[i-1]+a[i];
while(k--) {
cin>>q;
int l=1,r=n,mid,f=0;
cout<<upper_bound(sum,sum+n+1,q)-sum-1<<endl;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探