死亡左轮
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

桌面上有一把带有 m 个弹巢的左轮,弹巢按 1,2,3,..,m 的编号,顺时针绕成一圈,起初 1 号弹巢对准了枪管

现在有 n 个人从左到右坐成一排,准备玩死亡左轮的游戏,与普通的死亡左轮规则不同:
对于每个人都有一个权值 a_i,表示当第 i 个人开枪后,其左轮的弹巢将会逆时针旋转 a_i 格(即如果当前枪管对准的是 x 号弹巢,则旋转完对准 x+a_i 号弹巢)。
如果当前枪管所对的弹巢有子弹,那么这次开枪后,这个人就会死亡,且在本轮游戏中子弹会被消耗,即下一次转到这个弹巢就没子弹了。

现在 jackle 有 Q 次询问,每次询问一个区间 [l,r] 表示,从第 l 个人开始到第 r 个人,玩死亡左轮,每人依次开一枪,请问第几个人最先死亡?如果没人死亡,请你输出 No one died。

注意每次询问都是独立的,即每次死亡左轮的游戏,枪管都会对准 1 号弹巢,且子弹都会复原回初始状态。

输入描述:

1 行输入 3 正整数,m(1\leq m\leq 20),n(1\leq n\leq 10^5),Q(1\leq Q\leq10^5),分别表示弹巢数量,人数,询问次数。

2 行输入 m 个数,b_i=\{0,1\},表示第 i 个弹巢是否有子弹,0 表示没有,1 表示有。

3 行输入 n 个数,a_i(1\leq a_i\leq 10^9),表示第 i 个人每次开枪后,弹巢会逆时针旋转的次数。

接下来 Q 行,每行输入两个正整数 l,r(1\leq l\leq r\leq n),表示询问的区间。

输出描述:

对于每个询问,如果有人死亡,请你输出最先死亡的是第几个人,否则输出 No one died。
示例1

输入

复制
2 3 3
0 1
1 2 3
1 3
2 3
1 2

输出

复制
2
No one died
2