A60054.机器人Ⅱ

普及+/提高

通过率:0%

时间限制:3.00s

内存限制:256MB

题目描述

本题是机器Ⅰ的加强,题面完全一样,仅数据范围不一样

一条环形纸带被均分成 nn 个格子,每个格子被涂上了黑白两种颜色之一。从格子 11 开始顺时针数,依次为格子 11,格子 22,……,格子 nn。格子 ii 的颜色为 cic_i;有 mm 个程序,第 jj 个程序可以被描述为 (pj,lj,rj)(p_j,l_j,r_j) ,意义如下:

  • 把两个机器人 LobotLobotRobotRobot 放置到格子 pjp_j 上。同时我们记目前的颜色 colortcolor_tcpjc_{p_j} , 目前时间 t=0t = 0
  • 若机器人 LobotLobot 位于格子 ljl_j 上,并且机器人 RobotRobot 位于 rjr_j 上,程序结束。否则进行一次移动。 移动规则如下:
    • 目前时间 tt 增加 11
    • 若目前颜色 colortcolor_t 为黑色 ,LobotLobot 机器人逆时针移动一次 ,LobotLobot 到达位置 qq
    • 若目前颜色 colortcolor_t 为白色 ,RobotRobot 机器人顺时针移动一次 ,RobotRobot 到达位置 qq
    • 目前的颜色 colortcolor_t 更改为 cqc_q

对于第一次移动,我们认为上一次移动的机器人移动到了颜色为 colorpjcolor_{p_j} 的格子上。

对于所有的 mm 个程序,判断它会在运行多少秒后停止,或断言它不会停止。

输入格式

对于每组测试数据,第一行为两个正整数 n,mn , m

第二行为一个长度为 nn 的字符串 cc,第 ii 个字符表示 cic_i,其中若 ci=1c_i=\texttt{1} 表示格子 ii 是白色的,若 ci=0c_i=\texttt{0} 表示格子 ii 是黑色的。

接下来 mm 行,每行用三个整数 pj,lj,rjp_j,l_j,r_j 表示一个程序。

输出格式

对于每组测试数据,输出 mm 行,对于第 ii 行:

  • 若第 ii 个程序会停止,输出一个整数表示它运行的秒数 tit_i
  • 若第 ii 个程序不会停止,输出 -1

输入输出样例

  • 输入#1

    5 4
    10110
    1 4 2
    1 1 1
    2 3 1
    5 2 4

    输出#1

    3
    0
    23
    -1
    
  • 输入#2

    24 5
    111011000111010100000110
    4 7 8
    14 24 7
    8 17 4
    22 21 20
    12 8 17

    输出#2

    -1
    31
    -1
    -1
    9
    

说明/提示

数据范围

  • 1n1061 \le n \le 10^6
  • 1m5×1051\le m \le 5 \times 10^5
  • ci{1,0}c_i \in \{1 ,0 \}
  • 1pj,lj,rjn1 \le p_j ,l_j ,r_j \le n
首页