NC24866 [USACO 2009 Dec S]Music Notes

题目

  • 原题地址:[USACO 2009 Dec S]Music Notes
  • 题目编号:NC24866
  • 题目类型:二分
  • 时间限制:C/C++ 1秒,其他语言2秒
  • 空间限制:C/C++ 32768K,其他语言65536K

1.题目大意

  • 奶牛唱歌,n 个音符依次唱,每个音符持续一段时间,给一个时间,问在唱什么音

2.题目分析

  • 二分加前缀和,需要注意初始化b[0]=-1,因为时间是从0开始计时
  • 比如第一个音符持续三秒,那么第二秒末是第一个音,第三秒时则是第二个音

3.题目代码

#include <bits/stdc++.h>

using namespace std;

int b[500000008];

int main() {
    int n, q, p;
    cin >> n >> q;
    b[0] = -1;
    for(int i=1;i<=n;i++)
    {
        cin >> b[i];
        b[i] += b[i-1];
    }
    while(q--)
    {
        cin >> p;
        int ans;
        int l = 1;
        int r = n;
        int mid;
        while(l<=r)
        {
            mid = (l+r)/2;
            if(b[mid]>=p)
            {
                r = mid - 1;
                ans = mid;
            }
            else
                l = mid + 1;
        }
        cout << ans << endl;
    }
}
posted @ 2022-07-28 10:24  仪战群儒  阅读(47)  评论(0)    收藏  举报