(Jizhong)1592 [トレーニング] GDKOI音楽の拍(mnotes)[] +アナログ半

(ファイルIO):入力:mnotes.in出力:mnotes.out
制限時間:1000msのスペースの制約:131072キロバイトの特定の制限
後藤ProblemSet


タイトル説明
F J J F の曲を演奏し、彼の牛を教えるために準備ができて、歌 N ( 1 < = N < = 50 , 000 ) N(1 <= N <= 50,000) 番種の音節、 1 1 N N 、およびから従わなければなりません 1 1 N N 最初のための遊びのためであります i 持続的な音節の種類 B i ( 1 < = B i < = 10 , 000 ) B_i(1 <= B_i <= 10,000) ビート、ビートから 0 0 開始からのビートので、カウント 0 0 ビートへ B 1 1 B_1-1 最初のプレイ 1 1 から仲の音節、 B 1 B_1 B 1 + B 2 1 B_1 + B_2-1 最初のプレイ 2 2 忠の音節など。
牛で、最近の演奏に興味を持っていない、と彼らはあまりにも退屈を感じます。だから、牛に焦点を保つために、 F J J F 提案しました Q ( 1 < = Q < = 50 , 000 ) Q(1 <= Q <= 50,000) 形式の質問の質問は、まず」であります T T 時間ビート"は、どのような音節の再生を
それぞれの問題に対応します T i ( 0 < = T i < = 1 ) T_I(0 <= T_I <=ビートの総数-1) 牛を解決する助けてください。


入力
入力二つの空間の最初の行は、整数で区切られました N N Q Q
最初の 2 2 N + 1 N + 1 行は、整数が含ま B i B_i
最初の N + 2 N + Q + 1 N + 2、N + Q + 1 行は、整数が含ま T i T_I

出力
出力があり Q Q ライン、質問への答えに対応する出力の各行。


サンプル入力
3. 5
2
1
3
2
3
4
0
。1

サンプル出力
2
。3
。3
。1
。1


データ範囲の制限


アイデアを解く
二分+アナログ


コード

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,q,a[50010],x,l,r,mid;
bool flag;
int main(){
    freopen("mnotes.in","r",stdin);
    freopen("mnotes.out","w",stdout);
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        a[i]+=a[i-1];
    }
    for(int i=1;i<=q;i++)
    {
        scanf("%d",&x);
        ++x;
        l=1;r=n;
        flag=0;
        while(l<r)
        {
            mid=(l+r)/2;
            if(a[mid]>x)
                r=mid;
            if(a[mid]<x)
                l=mid+1;
            if(a[mid]==x)
            {
                printf("%d\n",mid);
                flag=1;
                break;
                
            }
        }
        if(!flag)
            printf("%d\n",l);
    }
}
公開された119元の記事 ウォンの賞賛8 ビュー4911

おすすめ

転載: blog.csdn.net/kejin2019/article/details/104976106