Feriado de inverno 2020 [gmoj1592] [Treinamento GDKOI] [Music Beat] [Prefixo e + dois pontos]

Descrição do título

FJ vai ensinar sua vaca a tocar uma música, composta por N (1 <= N <= 50.000) sílabas, numeradas de 1 a N, e deve ser tocada na ordem de 1 a N, e A sílaba dura B_i (1 <= B_i <= 10.000) batimentos, os batimentos são contados de 0, então a primeira sílaba é tocada do batimento 0 ao batimento B_1-1, de B_1 ao B_1 + B_2-1 É a segunda sílaba, e assim por diante.
Recentemente, as vacas não estão interessadas em tocar piano, elas se sentem muito chatas. Portanto, para manter as vacas focadas, FJ fez perguntas a Q (1 <= Q <= 50.000), o formato da pergunta é "qual sílaba é tocada no décimo ritmo",
cada pergunta corresponde a um T_i (0 <= T_i <= Número total de batidas-1) Por favor, ajude a vaca a resolvê-la.

Entrada

Na primeira linha, insira dois números inteiros separados por espaço N e Q.
Linhas 2 a N + 1 cada linha contém um número inteiro B_i linha
N + 2-N + Q + 1 linha cada linha contém um número inteiro T_i

Saída

A saída possui Q linhas e cada linha gera a resposta para a pergunta correspondente.

Entrada de amostra

3 5
2
1
3
2
3
4
0
1

Saída de amostra

2
3
3
1
1

Análise

É fácil pensar em violência, mas isso atinge o tempo limite.
Solução positiva: encontre o binário a [x] após o prefixo de um array e a pesquisa binária e produza mid ou l.

Código ativado

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,q,a[100001];
int main()
{
	freopen("mnotes.in","r",stdin);
	freopen("mnotes.out","w",stdout);
    cin>>n>>q;
    for(int i=1;i<=n;i++)
    {
    	scanf("%d",&a[i]);
    	a[i]=a[i-1]+a[i];//前缀和
	}
	for(register int i=1;i<=q;i++)
	{
		int x; 
		scanf("%d",&x);
		x++;
		int l=1,r=n,ff=0,mid;
		while(l<=r)//二分找a[x]
		{
			mid=(l+r)/2;
			if(a[mid]>x)
			{
				r=mid-1;
			}
			if(a[mid]<x)
			{
				l=mid+1;
			}
			if(a[mid]==x)
			{
				printf("%d\n",mid);
				ff=1;
				break;
			}
		}
		if(!ff) printf("%d\n",l);
	}
	fclose(stdin);
	fclose(stdout);
    return 0;
}

Publicado 110 artigos originais · 100 elogios · visualizações 8018

Acho que você gosta

Origin blog.csdn.net/dglyr/article/details/105036260
Recomendado
Clasificación