请用C++的代码实现以下功能: 输入格式: 第一行一个整数N表示序列中元素的个数。 第二行N个整数表示序列中的元素。 第三行一个整数Q表示操作的个数。 接下来Q行每行描述一个操作。操作分为两种: 1 P V表示将第P个数加上V。 2 L R K表示查询区间LR中第K小的数。 输出格式: 对于每个查询操作输出一行表示查询结果。 如果查询结果不存在则输出-1。 输入样例: 5
本题可以使用树状数组和线段树两种数据结构来实现。
方法一:树状数组
树状数组可以实现单点修改和区间查询第K小的数。对于单点修改,直接将对应的位置加上对应的值即可。对于查询第K小的数,可以使用二分查找加前缀和的方式来实现。
具体实现如下:
C++ 代码
原文地址: http://www.cveoy.top/t/topic/bxI9 著作权归作者所有。请勿转载和采集!