题意
给出n种音乐和它们持续的时间(从0开始),p个问题,求出每个问题中时间t的时候是哪一种音乐。
思路
求出每种音乐结束的时间,给问题排一下序,判断一下就好了。
代码
#include<cstdio>
#include<algorithm>
#define N 50001
using namespace std;
int n,m,mu[N],a,b;
struct node{
int q,x,ans;
}que[N];
bool cmp1(node x,node y) {return x.q<y.q;}
bool cmp2(node x,node y) {return x.x<y.x;}
int main()
{
freopen("mnotes.in","r",stdin);
freopen("mnotes.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
{
scanf("%d",&a);
mu[i]=a+b-1;//求结束的时间
b=mu[i]+1;
}
for (int i=1;i<=m;i++)
scanf("%d",&que[i].q),que[i].x=i;//x记录读入时的顺序
sort(que+1,que+m+1,cmp1);
int i=1,j=1;//i指向问题,j指向音乐
while (i!=m+1)
{
while (que[i].q<=mu[j]&&i!=m+1)
{
que[i].ans=j;
i++;
}
j++;
}
sort(que+1,que+m+1,cmp2);//排回来
for (int i=1;i<=m;i++)
printf("%d\n",que[i].ans);
}