我看这题很多人都在找,我就发一下代码吧!
蒜头君写了一个数列,这个数列可以分为连续的 n 段,其中第 i 段是 ai 个 numi 。然后他找了花椰妹玩游戏,花椰妹一共会提出 q 个问题,第 i 个问题是问这个数列的第 ki 个数是多少,你能帮蒜头君回答花椰妹的问题吗?
输入格式
第一行,两个正整数 n,q(1≤n,q≤105)。
接下来 n 行,每行两个正整数 ai,numi(1≤ai,numi≤109) ,两数之间以一个空格分隔
再接下来 q 行,每行一个正整数 ki(1≤ki≤∑ai)
本题输入输出量较大,请使用scanf/printf
。
输出格式
输出 q 行,每行一个整数,表示每次询问的结果。
样例输入
2 3
1 2
2 3
1
2
3
样例输出
2
3
3
#include <bits/stdc++.h>
using namespace std;
long long a[100005];
int num[100005];
int main() {
freopen("array.in", "r", stdin);
freopen("array.out", "w", stdout);
cin.tie(NULL);//个人不太喜欢用scanf/printf,用这个简化空间
int n, q;
cin >> n >> q;
for (int i = 1; i <= n; i++) {
cin >> a[i] >> num[i];
a[i] += a[i - 1];
}
while (q--) {
long long x;
cin >> x;
cout << num[lower_bound(a, a + n, x) - a] << endl;
}
return 0;
}