#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; }
先排序化单调,再用点二分,记得前缀和的储存