CF174C Range Increments
题目描述
Polycarpus 是一名业余程序员。现在他正在分析朋友的程序。他已经发现了这样一个函数:rangeIncrement(l, r),该函数对于数组 $a$ 的所有下标在区间 $[l,r]$ 内的元素,每个都加 1。换句话说,该函数执行以下操作:
```
function rangeIncrement(l, r)
for i := l .. r do
a[i] = a[i] + 1
```
Polycarpus 已经知道在一系列函数调用后数组 $a$ 的状态。他想要确定至少需要多少次函数调用才能达到这样的状态。此外,他还想知道需要哪些函数调用。可以保证所需操作次数不会超过 $10^5$。
在所有 rangeIncrement(l, r) 函数调用之前,数组所有元素都为零。
输入格式
第一行输入一个整数 $n$($1 \leq n \leq 10^5$),表示数组 $a[1...n]$ 的长度。
第二行输入 $n$ 个用空格隔开的整数 $a[1], a[2], ..., a[n]$($0 \leq a[i] \leq 10^5$),表示一系列 rangeIncrement(l, r) 函数调用后的数组 $a$ 的状态。
保证数组中至少有一个元素大于零。保证答案所需操作数不会超过 $10^5$。
输出格式
第一行输出 $t$,表示最少需要调用 rangeIncrement(l, r) 函数,使数组变换为输入时的状态。保证 $t \leq 10^5$。
接下来输出 $t$ 行,每行两个整数 $l_i, r_i$($1 \leq l_i \leq r_i \leq n$),表示第 $i$ 次调用 rangeIncrement(l, r) 的参数。调用顺序不限。
如果有多种方案,输出任意一种均可。
说明/提示
对于第一个示例,需要一次全数组区间的操作,以及四次额外的操作:
- 一次针对区间 [2,2](即第二个元素),
- 三次针对区间 [5,5](即第五个元素)。
由 ChatGPT 5 翻译