C. Valhalla Siege
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

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.

Input

The 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.

Output

Output qq lines, the ii-th of them is the number of standing warriors after the ii-th minute.

Examples
input

Copy
5 5
1 2 1 2 1
3 10 1 1 1
output

Copy
3
5
4
4
3
input

Copy
4 4
1 2 3 4
9 1 10 6
output

Copy
1
4
4
1
Note

In the first example:

  • after the 1-st minute, the 1-st and 2-nd warriors die.
  • after the 2-nd minute all warriors die (and all arrows left over are wasted), then they will be revived thus answer is 5 — all warriors are alive.
  • after the 3-rd minute, the 1-st warrior dies.
  • after the 4-th minute, the 2-nd warrior takes a hit and his strength decreases by 1.
  • after the 5-th minute, the 2-nd warrior dies

题意:你有n个士兵,每个士兵的生命值为

aiai,有q轮攻击,每轮攻击的伤害值为kiki,如果在某一轮中士兵全部死光了,那么在这一轮结束的时候就会全部复活,且这一轮攻击剩下的伤害就会被忽略,问你每轮攻击结束后你会有多少个士兵。

题解:对n个士兵的生命值记一下前缀和,每轮攻击的时候用upper_bound找一下前缀和里第一个大于

kiki的值所对应的编号,假设这一轮中upper_bound的结果为cur,那么前cur - 1个士兵一定全部死完了,所以就会剩下n - cur + 1个士兵。

(这里前缀和处理的思想很实用,为了用二分优化时间,我们用前缀和的形式把多次造成的伤害记录为一次,这样使用二分的时候就简单很多了。)

题目:

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.

Input

The first line contains two integers nn and q(1≤n,q≤200 000)q(1≤n,q≤200 000) — the number of warriors and the number of minutes in the battle.

The second line contains nn integers a1,a2,…,an(1≤ai≤109)a1,a2,…,an(1≤ai≤109) that represent the warriors’ strengths.

The third line contains qq integers k1,k2,…kq(1≤ki≤1014)k1,k2,…kq(1≤ki≤1014), the ii-th of them represents Lagertha’s order at the ii-th minute: kiki arrows will attack the warriors.

Output

Output 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 1 1
  • 1
  • 2
  • 3

output

3
5
4
4
3
  • 1
  • 2
  • 3
  • 4
  • 5

input

4 4
1 2 3 4
9 1 10 6
  • 1
  • 2
  • 3

output

1
4
4
1
  • 1
  • 2
  • 3
  • 4

Note

In the first example:

after the 1-st minute, the 1-st and 2-nd warriors die. 
after the 2-nd minute all warriors die (and all arrows left over are wasted), then they will be revived thus answer is 5 — all warriors are alive. 
after the 3-rd minute, the 1-st warrior dies. 
after the 4-th minute, the 2-nd warrior takes a hit and his strength decreases by 1. 
after the 5-th minute, the 2-nd warrior dies.


题意:

  你有n个士兵,每个士兵的生命值为aiai,有q轮攻击,每轮攻击的伤害值为kiki,如果在某一轮中士兵全部死光了,那么在这一轮结束的时候就会全部复活,且这一轮攻击剩下的伤害就会被忽略,问你每轮攻击结束后你会有多少个士兵。


思路:

  对n个士兵的生命值记一下前缀和,每轮攻击的时候用upper_bound找一下前缀和里第一个大于kiki的值所对应的编号,假设这一轮中upper_bound的结果为cur,那么前cur - 1个士兵一定全部死完了,所以就会剩下n - cur + 1个士兵。

(用前缀和的思想把多次的伤寒换算为一次,这样使用二分的时候就简单很多了)

ac代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = int(2e5) + ;
ll a[maxn], k[maxn], sum[maxn], dmg; int main() {
int n, q;
scanf("%d%d", &n, &q);
for (int i = ; i <= n; i++) scanf("%lld", a + i), sum[i] = sum[i - ] + a[i];
for (int i = ; i <= q; i++) scanf("%lld", k + i);
for (int turn = , cur; turn <= q; turn++)
{
dmg += k[turn];
if (dmg >= sum[n]) dmg = , printf("%d\n", n);
else printf("%d\n", n - int(std::upper_bound(sum + , sum + + n, dmg) - sum - ));
}
return ;
}

Codeforces-975C - Valhalla Siege 前缀和 思维的更多相关文章

  1. codeforces 975C Valhalla Siege

    题意: 有n个巫师站成一列,每个巫师有自己的血量. 一个人射箭攻击他们,每次造成若干点伤害,巫师按照给定的顺序承受伤害,如果伤害大了,那么死掉,伤害落到下一个巫师身上. 如果一轮攻击之后,所有的巫师都 ...

  2. [codeforce 975C] Valhalla Siege (二分)

    Examples input 5 5 1 2 1 2 1 3 10 1 1 1 output 3 5 4 4 3 input 4 4 1 2 3 4 9 1 10 6 output 1 4 4 1 N ...

  3. Codeforces Round #478 C. Valhalla Siege

    C. Valhalla Siege time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  4. 洛谷 P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)

    P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维) 前言 题目链接 本题作为一道Stl练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...

  5. CodeForces - 776C(前缀和+思维)

    链接:CodeForces - 776C 题意:给出数组 a[n] ,问有多少个区间和等于 k^x(x >= 0). 题解:求前缀和,标记每个和的个数.对每一个数都遍历到1e5,记录到答案. # ...

  6. Codeforces 873 B. Balanced Substring(前缀和 思维)

    题目链接: Balanced Substring 题意: 求一个只有1和0的字符串中1与0个数相同的子串的最大长度. 题解: 我的解法是设1的权值是1,设0的权值是-1,求整个字符串的前缀和并记录每个 ...

  7. Educational Codeforces Round 30 B【前缀和+思维/经典原题】

    B. Balanced Substring time limit per test 1 second memory limit per test 256 megabytes input standar ...

  8. Codeforces Round #304 (Div. 2) D 思维/数学/质因子/打表/前缀和/记忆化

    D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input s ...

  9. Codeforces Round #143 (Div. 2) (ABCD 思维场)

    题目连链接:http://codeforces.com/contest/231 A. Team time limit per test:2 seconds memory limit per test: ...

随机推荐

  1. win10安装Navicat 12 for MySQL

    Navicat 下载地址: https://blog.csdn.net/u013600314/article/details/80605981 Navicat 连接Mysql 的方法:https:// ...

  2. (二)SpringMVC+mybatis实践

    一.需求 以案例作为驱动 springmvc和mybatis使用一个案例(商品订单管理系统) 功能需求:商品的列表查询 二.环境准备 数据库环境 Java环境 jdk1.8 eclipse sprin ...

  3. ISO/IEC 9899:2011 条款6.5.8——关系操作符

    6.5.8 关系操作符 语法 1.relational-expression: shift-expression relational-expression    <    shift-expr ...

  4. 【物联网】UI设计

    https://designshidai.com/7337.html https://designshidai.com/24908.html http://www.qianqian-ye.com/sm ...

  5. layer confirm 三种选择按钮

    layer.confirm('请选择是否通过提现?(tips:同意直接打款,驳回不可恢复)', { btn : ['通过-打款','不通过','通过-已打款'], btn1:function(){ a ...

  6. Tools - 在线编译环境和工具汇总

    菜鸟教程 https://www.runoob.com/ 支持语言种类丰富,无需注册,包含教程.笔记.手册等内容. 菜鸟在线工具:https://c.runoob.com/ 菜鸟在线编译器:https ...

  7. android基础---->传感器的使用

    现在每部Android 手机里面都会内置有许多的传感器,它们能够监测到各种发生在手机上的物理事件,而我们只要灵活运用这些事件就可以编写出很多好玩的应用程序.今天我们开始简单的传感器使用的学习. 目录导 ...

  8. Django 操作已经存在的数据库

    反向操作数据库 何为反向操作.即是数据库在项目之前已经存在,不需要新建表,操作已经存在的表 # 进入站点目录下执行 python manage.py inspectdb #可以看到settings中连 ...

  9. 推荐linux运维必备的几本书

    首先,<鸟哥的linux私房菜> 鸟哥 其次,<linux就该这么学> 刘瑞版 然后,<CentOS linux系统运维> 张祥琳版 最后,<CentOS运维 ...

  10. ubuntu18.10 安装nodejs

    进入官网下载页面 下载对应版本 2.解压tar.xz文件在linux下,大部分情况下不能直接解压tar.xz的文件. 需要用 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx. ...