(Jizhong) 1592. [Formation] GDKOI rythmes musicaux (mNotes) [] + analogique moitié

(Fichier IO): entrée: mnotes.in sortie: mnotes.out
limite de temps: 1000 ms contraintes d'espace: 131072 KB restrictions spécifiques
Aller ProblemSet


Titre description
F J FJ prêt à enseigner ses vachesjouant une chanson, la chanson N ( 1 < = N < = 50 , 000 ) N (1 <= N <= 50 000) syllabes espèces, numérotées 1 1 à N N , et doit suivre de 1 1 à N N est l'ordre de jeu pour la première i je sorte de syllabes soutenues B i ( 1 < = B i < = 10 , 000 ) B_i (1 <= b_i <= 10 000) battements, battements de 0 0 commencecompter,sortebattement de 0 0 à battre B 1 1 B_1-1 jeu de la première 1 1 syllabe Zhong, à partir de B 1 B_1 à B 1 + B 2 1 B_1 + B_2-1 jeu de la première 2 2 syllabe Zhong, et ainsisuite.
Les vaches ne sont pas intéressés à jouer pour récemment, et ilssentent trop ennuyeux. Ainsi, afin de maintenir l'accent sur les vaches, F J FJ proposé Q ( 1 < = Q < = 50 , 000 ) Q (1 <= Q <= 50 000) des questions,questions de format est « premier T T fois beats jouer ce genre de syllabes, "
correspondant chacun à un problème T i ( 0 < = T i < = 1 ) T_i (0 <= T_i <= nombre total de battements -1) S'il vous plaît aider à résoudre les vaches.


Entrée
première ligne d'entrée deux espaces séparés par un nombre entier N N et Q Q
premier 2 2 à N + 1 N + 1 lignes contient un nombre entier B i Bi
la première N + 2 N + Q + 1 N + 2 N + Q + 1 lignes contient un nombre entier T i t_i

Sortie
Sortie a Q Q lignes, chaque ligne de sortie correspondant à la réponse à la question.


entrée d' échantillon
. 3. 5
2
. 1
. 3
2
. 3
. 4
0
. 1

Exemple de sortie
2
. 3
. 3
. 1
. 1


Limite de la plage de données


idées de solutions
bipartites + analogique


code

#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);
    }
}
Publié 119 articles originaux · a gagné les éloges 8 · vues 4911

Je suppose que tu aimes

Origine blog.csdn.net/kejin2019/article/details/104976106
conseillé
Classement