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