#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
int n,t;
long long sum[N];
int main()
{
cin>>n>>t;
sum[0]=0;
for(int i=1;i<=n;i++){
int a;
cin>>a;
sum[i]=sum[i-1]+a;
}
for(int i=1;i<=t;i++){
int flag=0;
int tar;
cin>>tar;
int l=1,r=n;
while(l<r-1){
int mid=l+(r-l)/2;
if(sum[mid]>tar)
{
r=mid;
}
if(sum[mid]<tar){
l=mid;
}
if(sum[mid]==tar){
cout<<mid<<endl;
flag=1;
break;
}
}
if(flag==0){
if(sum[r]<=tar){
cout<<r<<endl;
}
else if(sum[l]<=tar){
cout<<l<<endl;
}
else{
cout<<0<<endl;
}
}
}
return 0;
}
先排序化单调,再用点二分,记得前缀和的储存

京公网安备 11010502036488号