CF1707E.Replace

NOI/NOI+/CTSC

通过率:0%

时间限制:1.50s

内存限制:1024MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

You are given an integer array a1,…,ana_1,\ldots, a_n, where 1≤ai≤n1\le a_i \le n for all ii.

There's a "replace" function ff which takes a pair of integers (l,r)(l, r), where l≤rl \le r, as input and outputs the pair $$f\big( (l, r) \big)=\left(\min\{a_l,a_{l+1},\ldots,a_r\},\, \max\{a_l,a_{l+1},\ldots,a_r\}\right).$$

Consider repeated calls of this function. That is, from a starting pair (l,r)(l, r) we get f((l,r))f\big((l, r)\big), then f(f((l,r)))f\big(f\big((l, r)\big)\big), then f(f(f((l,r))))f\big(f\big(f\big((l, r)\big)\big)\big), and so on.

Now you need to answer qq queries. For the ii-th query you have two integers lil_i and rir_i (1≤li≤ri≤n1\le l_i\le r_i\le n). You must answer the minimum number of times you must apply the "replace" function to the pair (li,ri)(l_i,r_i) to get (1,n)(1, n), or report that it is impossible.

给你一个整数数组 a1,…,ana_1,\ldots, a_n,其中对所有 ii 均满足 1≤ai≤n1\le a_i \le n。

定义一个“替换”函数 ff,其输入为一对整数 (l,r)(l, r)(满足 l≤rl \le r),输出为

f((l,r))=(min⁡{al,al+1,…,ar}, max⁡{al,al+1,…,ar}).f\big( (l, r) \big)=\left(\min\{a_l,a_{l+1},\ldots,a_r\},\, \max\{a_l,a_{l+1},\ldots,a_r\}\right).

考虑对该函数进行重复调用:即从初始对 (l,r)(l, r) 出发,依次得到 f((l,r))f\big((l, r)\big)、f(f((l,r)))f\big(f\big((l, r)\big)\big)、f(f(f((l,r))))f\big(f\big(f\big((l, r)\big)\big)\big),依此类推。

现在你需要回答 qq 个查询。对于第 ii 个查询,给定两个整数 lil_i 和 rir_i(满足 1≤li≤ri≤n1\le l_i\le r_i\le n),你必须求出:将“替换”函数作用于 (li,ri)(l_i,r_i) 所需的最少次数,使得结果恰好为 (1,n)(1, n);若不可能达到 (1,n)(1, n),则报告不可能。

输入格式

The first line contains two positive integers nn, qq (1≤n,q≤1051\le n,q\le 10^5) — the length of the sequence aa and the number of the queries.

The second line contains nn positive integers a1,a2,…,ana_1,a_2,\ldots,a_n (1≤ai≤n1\le a_i\le n) — the sequence aa.

Each line of the following qq lines contains two integers lil_i, rir_i (1≤li≤ri≤n1\le l_i\le r_i\le n) — the queries.

第一行包含两个正整数 nn、qq(1≤n,q≤1051\le n,q\le 10^5)——分别表示序列 aa 的长度和查询的数量。

第二行包含 nn 个正整数 a1,a2,…,ana_1,a_2,\ldots,a_n(1≤ai≤n1\le a_i\le n)——即序列 aa。

接下来的 qq 行中,每行包含两个整数 lil_i、rir_i(1≤li≤ri≤n1\le l_i\le r_i\le n)——表示一次查询。

输出格式

For each query, output the required number of times, or −1-1 if it is impossible.

对于每个查询,输出所需的次数;如果不可能,则输出 −1-1。

输入输出样例

  • 输入#1

    5 6
    2 5 4 1 3
    4 4
    1 5
    1 4
    3 5
    4 5
    2 3

    输出#1

    -1
    0
    1
    2
    3
    4
  • 输入#2

    6 3
    2 3 4 6 1 2
    5 6
    2 5
    2 3

    输出#2

    5
    1
    3
  • 输入#3

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

    输出#3

    -1
    -1
    0

说明/提示

In the first example, n=5n=5 and a=[2,5,4,1,3]a=[2,5,4,1,3].

For the first query: (4,4)→(1,1)→(2,2)→(5,5)→(3,3)→(4,4)→…(4,4)\to(1,1)\to(2,2)\to(5,5)\to(3,3)\to(4,4)\to\ldots, so it's impossible to get (1,5)(1,5).

For the second query, you already have (1,5)(1,5).

For the third query: (1,4)→(1,5)(1,4)\to(1,5).

For the fourth query: (3,5)→(1,4)→(1,5)(3,5)\to(1,4)\to(1,5).

For the fifth query: (4,5)→(1,3)→(2,5)→(1,5)(4,5)\to(1,3)\to(2,5)\to(1,5).

For the sixth query: (2,3)→(4,5)→(1,3)→(2,5)→(1,5)(2,3)\to(4,5)\to(1,3)\to(2,5)\to(1,5).

在第一个例子中,n=5n=5 且 a=[2,5,4,1,3]a=[2,5,4,1,3]。

对于第一个查询:(4,4)→(1,1)→(2,2)→(5,5)→(3,3)→(4,4)→…(4,4)\to(1,1)\to(2,2)\to(5,5)\to(3,3)\to(4,4)\to\ldots,因此无法得到 (1,5)(1,5)。

对于第二个查询,你已经拥有 (1,5)(1,5)。

对于第三个查询:(1,4)→(1,5)(1,4)\to(1,5)。

对于第四个查询:(3,5)→(1,4)→(1,5)(3,5)\to(1,4)\to(1,5)。

对于第五个查询:(4,5)→(1,3)→(2,5)→(1,5)(4,5)\to(1,3)\to(2,5)\to(1,5)。

对于第六个查询:(2,3)→(4,5)→(1,3)→(2,5)→(1,5)(2,3)\to(4,5)\to(1,3)\to(2,5)\to(1,5)。

输入解题思路,AI测评打分。不知道怎么写?

首页