1122. 音乐节拍 (Standard IO)
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
题目描述
FJ准备教他的奶牛弹奏一首歌曲,歌曲由N种音节组成,编号为1到N,而且一定按照从1到N的顺序进行弹奏,第i种音节持续B_i(1<=B_i<=10,000)个节拍,节拍从0开始计数,因此从节拍0到节拍B_1-1弹奏的是第1种音节,从B_1到B_1+B_2-1弹奏的是第2种音节,依此类推。
最近奶牛对弹琴不感兴趣了,他们感觉太枯燥了。所以为了保持奶牛们注意力集中,FJ提出Q个问题,问题的格式都是“第T次节拍弹奏的是哪种音节”
每个问题对应一个T_i请你帮奶牛来解决。
输入
第一行输入两个空格隔开的整数N和Q。
第2至N+1行每行包含一个整数 B_i。
第N+2-N+Q+1行每行包含一个整数T_i。
输出
输出有Q行,每行输出对应问题的答案。
样例输入
3 5 2 1 3 2 3 4 0 1
样例输出
2 3 3 1 1
数据范围限制
N,Q <= 50000
答案如下:↓↓↓
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<ctime> 5 #include<algorithm> 6 #include<cmath> 7 using namespace std; 8 #define debug(x) cerr<<#x<<‘=‘<<x<<endl 9 #define MAXN 654321 10 11 int N,Q; 12 int A[MAXN]; 13 int s,y,l,v,a; 14 15 void binary_chop(int low,int high,int y){ 16 while (low<high){ 17 int mid=(low+high)/2; 18 if (A[mid]>=y) high=mid; 19 else low=mid+1; 20 } 21 cout<<low<<endl; 22 } 23 int main(){ 24 cin>>N>>Q; 25 cin>>s; 26 A[1]=s-1; 27 for (int i=2;i<=N;i++){ 28 scanf("%d",&s); 29 A[i]=s+A[i-1]; 30 } 31 for (int j=1;j<=Q;j++){ 32 scanf("%d",&y); 33 binary_chop(1,N,y); 34 } 35 return 0; 36 } 37 38
原文地址:https://www.cnblogs.com/yangzhicheng-blog/p/10686150.html
时间: 2024-11-06 09:28:13