直接维护数组 ,并按顺序处理查询。
对于类型 1,复制 ,将副本排序并去重。每个原始值在这个有序去重数组 中的 lower_bound 位置就是压缩后的坐标。区间外的元素不变。
对于类型 2,首先遍历区间求出最小值 和最大值 。为了避免浮点数运算,对区间中每个候选值 比较 。在使该值最小的所有候选值中选择最小者。数组元素与中间计算均使用 long long。
对于类型 3,直接将区间中的每个元素加上 。
正确性:排序去重后的下标恰好等于严格小于对应数值的不同数值的个数,因此类型 1 正确。类型 2 检查区间中出现的所有候选值,精确比较它们到目标中点距离的两倍,并正确处理距离相等的情况。类型 3 仅修改指定区间内的元素。因此所有查询均得到正确处理。
每次类型 1 查询的时间复杂度为 ,其他查询均为 。由于类型 1 最多出现 次,总时间复杂度为 ,额外空间复杂度为 。