题解P2969

· · 题解

题解P2969 音符 Music Notes

这是题目链接。
注: “在时间段区间t,T+1内,奶牛敲的是哪个音阶?”意思是说,输入数字 T,输出时刻 T 奶牛正在演奏哪个音阶。

下面是解题部分。如果你希望能立刻得到正解,请跳过“思路1”。

下面是我的代码。代码中有注释,希望你可以看懂!欢迎参考。

//时间复杂度:O(Q log N)
//空间复杂度:O(N)
#include <bits/stdc++.h>
using namespace std;
int Binary_Search(int array[]/*待查找数组*/,int start/*查找起始点*/,int end/*查找结束点*/,int key/*键值*/){
    int ans,mid;
    while(start<=end){
        mid=(start+end)/2;
        if(array[mid]-1>key){
            ans=mid;
            end=mid-1;
        }
        else
            start=mid+1;
    }
    return ans;
}//二分查找非递归版,我没有用STL
int n,q,b[50100]/*变量名如题意*/,pre[50100]/*pre——前缀和*/,temp/*一个临时变量*/;
int main(){
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>b[i];
        pre[i]=pre[i-1]+b[i];/*处理前缀和*/
    }/*输入数据*/
    for(int i=0;i<q;i++){
        cin>>temp;
        cout<<Binary_Search(pre,1,n,temp)<<endl;
    }/*回答询问*/
    return 0;
}

照例给一个提交记录。
欢迎提出意见。如有意见,请在评论区@我,或私信我。我会尽量作出回应(只是不保证回应速度)。