题目背景
试题来源:https://koi.or.kr/archives/。中文翻译做了少量本土化修改。
按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。
题目描述
给定一个长度为 M 的正整数序列 X1,X2,…,XM,我们希望将这个序列变为升序。一个序列 X1,X2,…,XM 是升序的,当且仅当对所有 i(1≤i≤M−1)满足 Xi≤Xi+1。
为了将序列 X 变为升序,可以对其应用如下操作任意次数(包括 0 次):
- 对于某个 i(1≤i≤M),将 Xi 乘以 2。
我们将通过最少的操作次数将 X 变为升序时所需的操作次数记为 f(X)。
现在,给定一个长度为 N 的正整数序列 A1,A2,…,AN,以及 Q 个查询。每个查询给出两个整数 l 和 r,满足 1≤l≤r≤N。查询的目标是计算 f(Al,Al+1,…,Ar),即将从 A 中截取的子序列升序所需的最小操作次数。
请计算并输出每个查询的答案。
输入格式
第一行输入两个整数 N 和 Q,用空格分隔。
第二行输入 N 个整数 A1,A2,…,AN,用空格分隔。
接下来的 Q 行,每行输入两个整数 l 和 r,表示一次查询。
输出格式
输出 Q 行,第 i 行输出第 i 个查询的答案。
10 5
5 2 7 3 2 9 6 3 3 5
3 9
1 10
1 8
2 4
8 9
14
27
19
2
0
10 5
2 8 4 9 10 8 5 3 7 7
2 8
1 10
3 3
1 3
8 10
7
11
0
1
0
提示
约束条件
- 所有输入均为整数。
- 1≤N≤250000
- 1≤Q≤250000
- 1≤Ai≤109(1≤i≤N)
- 对所有查询满足 1≤l≤r≤N
子问题
1.(5 分)N≤10000, Q≤10000
2.(7 分)N≤10000
3.(28 分)所有查询满足 r=N
4.(10 分)对所有 i 满足 Ai≥Ai+1
5.(5 分)对所有 i 满足 Ai≤2
6.(10 分)对所有 i 存在非负整数 ki 使得 Ai=2ki
7.(35 分)无额外限制条件
翻译由 ChatGPT-4o 完成