解题思路
歌曲由 个音符组成,第 个音符持续 拍。在时间 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; }