解题思路

歌曲由 个音符组成,第 个音符持续 拍。在时间 0 开始播放歌曲;
从时间 0 到时间 之前播放音符 1,从时间 到时间 之前播放音符 2,依此类推。
询问 个如下述形式的问题:在从时间 到时间 之前的间隔中,应该演奏哪个音符?

在时间 范围内时,演奏音符 1;
在时间 范围内时,演奏音符 2;
依此类推。

使用 map 记录时间节点 对应的音符,
就可以使用 map::lower_bound() 函数得出对应的演奏音符。

C++代码

#include<iostream>
#include<map>
using namespace std;

int main(){
    int N, Q;
    cin >> N >> Q;
    map<int, int> mp;
    int time = 0;
    int b;
    for(int i=1; i<=N; ++i){
        cin >> b;
        time += b;
        mp[time - 1] = i;
    }

    int t, ans;
    for(int i=0; i<Q; ++i){
        cin >> t;
        auto it = mp.lower_bound(t);
        ans = it->second;
        cout << ans << endl;
    }
    return 0;
}