链接:https://www.nowcoder.com/questionTerminal/83b419c027fa490aa60669b0e7dc06a3
在果园里有N堆苹果,每堆苹果的数量为ai,小易希望知道从左往右数第x个苹果是属于哪一堆的。
牛牛觉得这个问题太简单,所以希望你来替他回答。
输入描述:
第一行一个数n(1 <= n <= 105)。
第二行n个数ai(1 <= ai <= 1000),表示从左往右数第i堆有多少苹果
第三行一个数m(1 <= m <= 105),表示有m次询问。
第四行m个数qi,表示小易希望知道第qi个苹果属于哪一堆。
输出描述:
m行,第i行输出第qi个苹果属于哪一堆。
示例1
输入
5
2 7 3 4 9
3
1 25 11
输出
1
5
3
二分法查找可以用lower_bound()
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;
while(cin>>n){
vector<int> a(n,0);
int i=0,j=0;
while(n--){
cin>>a[i];
if(i>0)
a[i]+=a[i-1];
i++;
}
cin>>m;
vector<int> q(m,0);
while(m--){
cin>>q[j++];
}
for(int i=0;i<q.size();i++){
int pos = lower_bound(a.begin(), a.end(), q[i]) - a.begin();
cout << pos + 1 << endl;
}
}
return 0;
}