luogu#P11318. [RMI 2021] 奇树 / Weirdtree
[RMI 2021] 奇树 / Weirdtree
题目背景
译自 9th Romanian Master of Informatics, RMI 2021 D2T3。。
提交时,需要在文件头添加
void initialise(int N, int Q, int h[]);
void cut(int l, int r, int k);
void magic(int i, int x);
long long int inspect(int l, int r);
请使用 C++17 或更高版本提交。
题目描述
这是一道(函数式)交互题。
你需要维护一个长度为 的非负整数序列 。有三种操作,一共 次:
-
操作 1(砍树)。给定 。执行 次以下操作:
- 若区间 的最大值为 ,无事发生;
- 否则,将最大值减去 (如果存在多个,取下标最小的一个)。
形式化地:
- 若 ,无事发生。
- 否则,记 (换句话说,满足 的最小的 )。令 。
-
操作 2(施法)。给定 ,令 。
-
操作 3(查询)。给定 ,求 。
实现细节
你不需要,也不应该实现 main
函数。你应当实现以下函数:
void initialise(int N, int Q, int h[]);
void cut(int l, int r, int k);
void magic(int i, int x);
long long int inspect(int l, int r);
initialise
函数:- 将在最开始被调用恰好一次。
N
:数组长度。Q
:询问次数。h[]
:长度为 的数组,h[i]
()表示数列中的第 个数。
cut
函数:- 见操作 1。
magic
函数:- 见操作 2。
inspect
函数:- 见操作 3。
- 返回一个整数表示答案。
你可以自由使用全局变量,STL 库等。
为了方便选手本地测试,我们在附件中提供了 。下面的输入输出格式均表示 sample grader 的输入输出格式。
输入格式
第一行,两个正整数 ;
第二行, 个整数 ;
接下来 行,每行若干个整数:第一个整数表示操作类型,接下来若干个数表示参数。
输出格式
对于每个操作 3,输出一行表示答案。
6 10
1 2 3 1 2 3
1 1 6 3
3 1 6
1 1 3 3
3 1 6
1 1 3 1000
3 1 6
2 1 1000
3 1 6
1 1 3 999
3 1 5
9
6
5
1005
4
提示
对于 的数据,保证:
- ;
- ;
- ;
- 。
子任务编号 | 特殊性质 | 得分 | |
---|---|---|---|
A | |||
B | |||
C | |||
- 特殊性质 A:。
- 特殊性质 B:没有操作 2。
- 特殊性质 C:(这对操作 都有效)。