P12646 [KOI 2024 Round 1] 升序

题目背景

试题来源:。中文翻译做了少量本土化修改。 按照[署名—非商业性使用—相同方式共享 4.0 协议国际版](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans)进行授权。

题目描述

给定一个长度为 $M$ 的正整数序列 $X_1, X_2, \dots, X_M$,我们希望将这个序列变为升序。一个序列 $X_1, X_2, \dots, X_M$ 是升序的,当且仅当对所有 $i$($1 \leq i \leq M - 1$)满足 $X_i \leq X_{i+1}$。 为了将序列 $X$ 变为升序,可以对其应用如下操作任意次数(包括 $0$ 次): - 对于某个 $i$($1 \leq i \leq M$),将 $X_i$ 乘以 $2$。 我们将通过最少的操作次数将 $X$ 变为升序时所需的操作次数记为 $f(X)$。 现在,给定一个长度为 $N$ 的正整数序列 $A_1, A_2, \dots, A_N$,以及 $Q$ 个查询。每个查询给出两个整数 $l$ 和 $r$,满足 $1 \leq l \leq r \leq N$。查询的目标是计算 $f(A_l, A_{l+1}, \dots, A_r)$,即将从 $A$ 中截取的子序列升序所需的最小操作次数。 请计算并输出每个查询的答案。

输入格式

第一行输入两个整数 $N$ 和 $Q$,用空格分隔。 第二行输入 $N$ 个整数 $A_1, A_2, \dots, A_N$,用空格分隔。 接下来的 $Q$ 行,每行输入两个整数 $l$ 和 $r$,表示一次查询。

输出格式

输出 $Q$ 行,第 $i$ 行输出第 $i$ 个查询的答案。

说明/提示

**约束条件** - 所有输入均为整数。 - $1 \leq N \leq 250\,000$ - $1 \leq Q \leq 250\,000$ - $1 \leq A_i \leq 10^9 \quad (1 \leq i \leq N)$ - 对所有查询满足 $1 \leq l \leq r \leq N$ **子问题** 1.(5 分)$N \leq 10\,000,\ Q \leq 10\,000$ 2.(7 分)$N \leq 10\,000$ 3.(28 分)所有查询满足 $r = N$ 4.(10 分)对所有 $i$ 满足 $A_i \geq A_{i+1}$ 5.(5 分)对所有 $i$ 满足 $A_i \leq 2$ 6.(10 分)对所有 $i$ 存在非负整数 $k_i$ 使得 $A_i = 2^{k_i}$ 7.(35 分)无额外限制条件 翻译由 ChatGPT-4o 完成