BZOJ3412: [Usaco2009 Dec]Music Notes乐谱

时间:2023-03-09 15:59:18
BZOJ3412: [Usaco2009 Dec]Music Notes乐谱

3412: [Usaco2009 Dec]Music Notes乐谱

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 35  Solved: 30
[Submit][Status]

Description

Input

第1行:两个整数N,Q.

第2到N+1行:第i+l行只有一个整数Bi.

第N+2到N+Q+I行:第N+i+l行只有一个整数Ti.

Output

第1到Q行:对与每个询问,在词问的时间内,奶牛敲击的是哪个音阶?

Sample Input

3 5
2
1
3
2
3
4
0
1

Sample Output

2
3
3
1
1

HINT

Source

Silver

题解:

二分这个值即可。我们是c++,可以直接lower_bound

400T水了这么一道T_T

代码:

 #include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 50000+100
#define maxm 500+100
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,m,x,a[maxn];
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();m=read();a[]=-;
for1(i,n)x=read(),a[i]=a[i-]+x;
while(m--)printf("%d\n",lower_bound(a+,a+n+,read())-a);
return ;
}