codeforce----Valhalla Siege

Ivar the Boneless is a great leader. He is trying to capture Kattegat from Lagertha. The war has begun and wave after wave Ivar’s warriors are falling in battle.Ivar has nn

warriors, he places them on a straight line in front of the main gate, in a way that the ii

-th warrior stands right after (i−1)(i−1)

-th warrior. The first warrior leads the attack.Each attacker can take up to aiai

arrows before he falls to the ground, where aiai

is the ii

-th warrior’s strength.Lagertha orders her warriors to shoot kiki

arrows during the ii

-th minute, the arrows one by one hit the first still standing warrior. After all Ivar’s warriors fall and all the currently flying arrows fly by, Thor smashes his hammer and all Ivar’s warriors get their previous strengths back and stand up to fight again. In other words, if all warriors die in minute tt

, they will all be standing to fight at the end of minute tt

.The battle will last for qq

minutes, after each minute you should tell Ivar what is the number of his standing warriors.InputThe first line contains two integers nn

and qq

(1≤n,q≤2000001≤n,q≤200000

) — the number of warriors and the number of minutes in the battle.The second line contains nn

integers a1,a2,…,ana1,a2,…,an

(1≤ai≤1091≤ai≤109

) that represent the warriors’ strengths.The third line contains qq

integers k1,k2,…,kqk1,k2,…,kq

(1≤ki≤10141≤ki≤1014

), the ii

-th of them represents Lagertha’s order at the ii

-th minute: kiki

arrows will attack the warriors.
OutputOutput qq lines, the ii-th of them is the number of standing warriors after the ii-th minute.Examples

Input

5 5
1 2 1 2 1
3 10 1

Output

3
5
4
4
Input
4 4
1 2 3 4
9 1 10 6
Output
1
4
4
1

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 2e5 + 10;
typedef long long LL;
LL a[N], k[N], sum[N], dam;
int main(){
 int n, q;
 cin >> n >> q;
 for (int i = 1; i <= n; i ++){
  cin >> a[i];
  sum[i] = sum[i - 1] + a[i];
 }
 for (int i = 1; i <= q; i ++)     scanf("%lld", &k[i]);
 for (int i = 1; i <= q; i ++){
  dam += k[i];
  if (dam >= sum[n]){
   dam = 0;
   cout << n << endl;
  }
    else printf("%d\n",n - (int)(upper_bound(sum + 1, sum + 1 + n, dam) - sum - 1 ));
 }
 return 0;
} 
发布了106 篇原创文章 · 获赞 67 · 访问量 5431

猜你喜欢

转载自blog.csdn.net/qq_45772483/article/details/104888252
今日推荐