zoukankan      html  css  js  c++  java
  • 洛谷 P2969 [USACO09DEC]音符Music Notes

    题目描述

    FJ is going to teach his cows how to play a song. The song consists of N (1 <= N <= 50,000) notes, and the i-th note lasts for B_i (1 <= B_i <= 10,000) beats (thus no song is longer than 500,000,000 beats). The cows will begin playing the song at time 0; thus, they will play note 1 from time 0 through just before time B_1, note 2 from time B_1 through just before time B_1 + B_2, etc.

    However, recently the cows have lost interest in the song, as they feel that it is too long and boring. Thus, to make sure his cows are paying attention, he asks them Q (1 <= Q <= 50,000) questions of the form, 'In the interval from time T through just before time T+1, which note should you be playing?' The cows need your help to answer these questions which are supplied as T_i (0 <= T_i <=

    end_of_song).

    Consider this song with three notes of durations 2, 1, and 3 beats:

    Beat:   0    1    2    3    4    5    6    ...
            |----|----|----|----|----|----|--- ...
            1111111111     :              :
                      22222:              :
                           333333333333333:

    Here is a set of five queries along with the resulting answer:

    Query Note

    2 2

    3 3

    4 3

    0 1

    1 1

    约翰准备教他的奶牛们弹一首歌.这首歌由N(1<=n<= 50000)个音阶组成,第i个音阶要敲 击Bi<=10000次.奶牛从第0时刻开始弹,因此他从0时刻到Bi-1时刻都是敲第1个音阶, 然后他从B1时刻到B1+B2-1时刻敲第2个音阶,从B1+B2到B1+B2+B3-1时刻敲第3个 音阶……现在有q(i<q<50000)个问题:在时间段区间t,T+1内,奶牛敲的是哪个音阶?

    输入输出格式

    输入格式:

     

    • Line 1: Two space-separated integers: N and Q

    • Lines 2..N+1: Line i+1 contains the single integer: B_i

    • Lines N+2..N+Q+1: Line N+i+1 contains a single integer: T_i

     

    输出格式:

     

    • Lines 1..Q: For each query, print a single integer that is the index of the note that the cows should be playing.

     

    输入输出样例

    输入样例#1: 复制
    3 5 
    2 
    1 
    3 
    2 
    3 
    4 
    0 
    1 
    
    输出样例#1: 复制
    2 
    3 
    3 
    1 
    1 
    思路:二分
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,q;
    int l,r,mid;
    int b[50010],num[50010];
    int main(){
        scanf("%d%d",&n,&q);
        for(int i=1;i<=n;i++){
            scanf("%d",&b[i]);
            num[i]=num[i-1]+b[i];
        }
        for(int i=1;i<=q;i++){
            int x;
            scanf("%d",&x);
            l=1;r=n;
            while(l<=r){
                mid=(l+r)/2;
                if(num[mid]<=x)    l=mid+1;
                else r=mid-1;
            }
            cout<<l<<endl;
        }
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    [bbk2908]第4集 Chapter 03 介绍RAC的体系结构
    [bbk3011]第8集 Chapter 05 介绍RAC安装过程概述
    [bbk3100]第7集 Chapter 04 介绍RAC中CVU工具的使用
    [bbk2907]第3集 Chapter 02 RAC的安装过程中需要注意的要点
    [bbk2905]第1集 Chapter 01 介绍RAC概述
    [bbk2906]第2集 Chapter 02 介绍RAC概述
    RAC之CRS架构简介
    NOIP普及组2017比赛总结
    struct和typedef
    KMP详解(转)
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7881472.html
Copyright © 2011-2022 走看看