你成为了巴伊托琳娜女王(Queen Bajtolina)的园丁。听起来很棒,对吧?如果你这么认为,那说明你对这份工作还不够了解。女王的城堡旁有一个巨大的花园,里面有 $n$ 棵树,一棵接一棵地排列着。这还不是最糟糕的,你能否在任何时候都能回答女王的问题:她的哪些树现在已经成熟了?我们假设一棵树的高度至少达到 $k$ 个字节米(bajtymetr)时,它就是成熟的。
有时女王会要求你用魔法喷壶浇灌她的一些树。每次这样的操作都会使所有被浇灌的树的高度增加恰好 1 个字节米。
证明你胜任这份工作,并快速回答女王的所有问题!
交互
请编写一个库与评测程序进行通信。该库应至少包含以下三个函数,由评测程序调用:
inicjuj(n, k, D)—— 此函数在评测开始时会被调用恰好一次。你可以利用它来初始化你的数据结构。它接收树的数量 $n$、成熟树的最小高度限制 $k$ 以及一个长度为 $n$ 的数组 $D$,其中包含所有树的初始高度。树的编号为从 $0$ 到 $n-1$ 的连续整数。- C/C++:
void inicjuj(int n, int k, int *D); - Pascal:
procedure inicjuj(n, k : LongInt; var D : array of LongInt);
- C/C++:
podlej(a, b)—— 表示女王要求你浇灌从第 $a$ 棵到第 $b$ 棵(包含 $a$ 和 $b$)的所有树($0 \le a \le b \le n-1$)。调用此过程/函数意味着这些树中的每一棵高度增加 1 个字节米。- C/C++:
void podlej(int a, int b); - Pascal:
procedure podlej(a, b : LongInt);
- C/C++:
dojrzale(a, b)—— 女王询问你编号从 $a$ 到 $b$(包含 $a$ 和 $b$)的树中有多少棵已经成熟($0 \le a \le b \le n-1$)。- C/C++:
int dojrzale(int a, int b); - Pascal:
function dojrzale(a, b : LongInt) : LongInt;
- C/C++:
你的库不能读取任何数据(无论是从标准输入还是从文件)。它也不能向文件或标准输出写入任何内容。它可以向标准诊断输出(stderr)写入内容——但请记住,这会消耗宝贵的时间。
如果你使用 C/C++ 编写,你的库不能包含 main 函数。如果你使用 Pascal 编写,你应该提供一个模块。
只有当你的解决方案满足上述所有技术要求并正确回答了女王的所有问题时,你才能在给定的测试中获得分数。
数据范围
在所有测试中,满足以下条件:
- $1 \le n \le 300\,000$
- $1 \le k \le 10^9$
podlej和dojrzale函数的调用总次数不超过 $300\,000$- 所有树的初始高度均为不超过 $10^9$ 的正整数
在总分占比 20% 的测试中,满足以下额外条件:
- $n \le 2\,000$
podlej和dojrzale函数的调用总次数不超过 $10\,000$
在总分占比 50% 的测试中,所有 podlej 函数的调用均在所有 dojrzale 函数的调用之前。
样例
输入格式 1
inicjuj(4, 6, D) dojrzale(2, 3) podlej(0, 2) dojrzale(1, 2) podlej(2, 3) podlej(0, 1) dojrzale(0, 3)
输出格式 1
1 0 3
说明
初始时有 $n=4$ 棵树,高度分别为 $5, 4, 3, 7$,且 $k=6$。
第一次询问 dojrzale(2, 3):区间 $[2, 3]$ 中有 1 棵成熟的树。
第一次浇灌 podlej(0, 2):浇灌第 $0, 1, 2$ 棵树。
第二次询问 dojrzale(1, 2):区间 $[1, 2]$ 中有 0 棵成熟的树。
后续浇灌及最后一次询问 dojrzale(0, 3):区间 $[0, 3]$ 中有 3 棵成熟的树。