跳转至

小Y的线段树

预估时间限制:1.5 秒。内存限制:512 MB。

实际时限以标准程序在目标环境的最慢用例中位时间乘以 \(10\) ,按 \(0.5\) 秒向上取整。参考环境见评测说明。

本题采用倍率十,为支持逐条回答询问的倍增实现保留至少两倍实测余量。各程序耗时见测量记录。

背景故事

“这是什么newbee操作?”

小Y不是死宅,他喜欢玩碧蓝,小学时还是体育生,所以他出了一道线段树题。

他有一个长度为 \(N\) 的序列。他会告诉你序列的长度和每个位置的元素,却说“不会给你这个序列”。接下来有 \(M\) 次询问:将区间 \([l,r]\) 中的元素从左到右依次放入一个初始为空的严格单调递减栈,最终栈的大小是多少?

形式化问题描述

给定长度为 \(N\) 的整数序列 \(a_1,\ldots,a_N\) 和 \(M\) 个询问。每个询问给出 \([l,r]\) ,独立从空栈开始,按 \(a_l,a_{l+1},\ldots,a_r\) 的顺序处理每个元素 \(v\) :

  1. 只要栈非空且栈顶值不大于 \(v\) ,就弹出栈顶。
  2. 将 \(v\) 压入栈。

因此,栈中元素从底到顶严格递减,相等的旧元素也会弹出。输出每次询问处理结束后的栈大小。询问之间不保留栈,也不修改序列。

输入格式

第一行两个整数 \(N,M\) .第二行 \(N\) 个整数 \(a_1,\ldots,a_N\) .接下来 \(M\) 行,每行两个整数 \(l,r\) .

输出格式

输出 \(M\) 行,第 \(i\) 行一个整数,表示第 \(i\) 个询问的答案。

样例

样例 1

输入

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

输出

3
1
1
1

样例 2

输入

2 1
1 2
1 2

输出

1

样例 3

输入

3 2
9 7 5
1 3
2 3

输出

3
2

样例解释

第一组的四个最终栈从底到顶分别为 \((5,4,2)\) 、\((4)\) 、\((3)\) 、\((2)\) .相等的两个三只留下后读入的一个。第二组中新值二会弹出一。第三组两个区间本身都严格递减。

区间处理时栈的变化

数据范围与保证

\(1\le N,M\le5\times10^5\) , \(0\le a_i\le10^9\) , \(1\le l\le r\le N\) .

分值比例 额外条件
100% 无额外条件