(Jizhong) 1592. [Formación] GDKOI latidos musicales (mNotes) [] + analógico-media

(Archivo IO): Entrada: mnotes.in de salida: mnotes.out
límite de tiempo: 1000 ms limitaciones de espacio: las restricciones específicas 131072 KB
Goto Boletín de problemas


título Descripción
F J FJ listo para enseñar a sus vacas reproducir una canción, la canción N ( 1 < = N < = 50 , 000 ) N (1 <= N <= 50.000) especies sílabas, numeradas 1 1 a N norte , y debe seguir desde 1 1 a N norte es el orden de juego para la primera i yo tipo de sílabas sostenidas B i ( 1 < = B i < = 10 , 000 ) B_i (1 <= b_i <= 10.000) late, late desde 0 0 empieza a contar, por lo que batir a partir de 0 0 a batir B 1 1 B_1-1 juego de la primera 1 1 Zhong sílaba, desde B 1 B_1 para B 1 + B 2 1 B_1 + B_2-1 juego de la primera 2 2 Zhong sílaba, y así sucesivamente.
Las vacas no está interesado en jugar para los recientemente, y se sienten demasiado aburrido. Así que con el fin de mantener la atención en las vacas, F J FJ propuso Q ( 1 < = Q < = 50 , 000 ) Q (1 <= Q <= 50.000) preguntas, preguntas de formato es "primero T T veces mejor que jugar qué tipo de sílabas ",
cada uno correspondiente a un problema T i ( 0 < = T i < = 1 ) T_i (0 <= t_i <= número total de latidos -1) Por favor, ayuda a resolver las vacas.


Input
primera línea de entrada dos espacios separados por un número entero N norte y Q Q
primera 2 2 a N + 1 N + 1 líneas contiene un número entero B i Bi
el primer N + 2 N + Q + 1 N + 2-N + Q + 1 líneas contiene un número entero T i t_i

Salida
La salida tiene Q Q líneas, cada línea de salida correspondiente a la respuesta a la pregunta.


entrada de la muestra
. 3. 5
2
. 1
. 3
2
. 3
. 4
0
. 1

Salida de muestra
2
. 3
. 3
. 1
. 1


límite de rango de datos


La solución de las ideas
bipartita + analógico


código

#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);
    }
}
Publicados 119 artículos originales · ganado elogios 8 · vistas 4911

Supongo que te gusta

Origin blog.csdn.net/kejin2019/article/details/104976106
Recomendado
Clasificación