CF52C Circular RMQ

题目描述

给定一个环形数组 $ a_{0},a_{1},...,a_{n-1} $。有两种操作: - $ inc(lf,rg,v) $——该操作将区间 $ [lf,rg] $(包括两端)内的每个元素加上 $ v $; - $ rmq(lf,rg) $——该操作返回区间 $ [lf,rg] $(包括两端)内的最小值。 假设区间为环形区间,因此若 $ n=5 $ 且 $ lf=3,rg=1 $,则所指索引依次为:$ 3,4,0,1 $。 请编写程序处理给定的操作序列。

输入格式

第一行为整数 $ n $($ 1 \leq n \leq 200000 $)。 第二行为数组的初始状态:$ a_{0},a_{1},...,a_{n-1} $($ -10^6 \leq a_{i} \leq 10^6 $),$ a_{i} $ 为整数。 第三行为整数 $ m $($ 0 \leq m \leq 200000 $),表示操作的个数。 接下来的 $ m $ 行,每行为一个操作。如果该行有两个整数 $ lf,rg $($ 0 \leq lf,rg \leq n-1 $),则表示 $ rmq $ 操作;如果有三个整数 $ lf,rg,v $($ 0 \leq lf,rg \leq n-1 ; -10^6 \leq v \leq 10^6 $),则表示 $ inc $ 操作。

输出格式

对于每个 $ rmq $ 操作,输出其结果。请不要在 C++ 中使用 %lld 格式符读取或输出 64 位整数,建议使用 cout(也可以使用 %I64d)。

说明/提示

由 ChatGPT 5 翻译