本文共 2044 字,大约阅读时间需要 6 分钟。
为了解决这个问题,我们需要根据Levko的操作记录,重建一个可能的初始数组,使得在执行这些操作之后,数组的结果与记录一致。我们可以通过逆向处理每个操作来确定最终的初始数组。
import sysdef main(): n, m = map(int, sys.stdin.readline().split()) ops = [] for _ in range(m): parts = list(map(int, sys.stdin.readline().split())) ops.append(parts) a = [10**18] * (n + 1) # 1-based indexing for i in range(m-1, -1, -1): t, l, r, val = ops[i] if t == 1: for j in range(l, r + 1): a[j] -= val else: current_max = max(a[l:r+1]) if current_max > val: for j in range(l, r + 1): if a[j] > val: a[j] = val # Adjust to the constraints for i in range(1, n+1): if a[i] > 1e9: a[i] = int(1e9) elif a[i] < -1e9: a[i] = int(-1e9) # Verify the operations flag = True for i in range(m): t, l, r, val = ops[i] if t == 1: for j in range(l, r + 1): expected = a[j] + val if expected != a[j]: flag = False break if not flag: break else: max_val = max(a[l:r+1]) if max_val != val: flag = False break if not flag: print("NO") else: print("YES") print(' '.join(map(str, a[1:])))if __name__ == "__main__": main() n 和操作数量 m,然后读取所有的操作并存储在 ops 列表中。n+1 的数组 a,初始值为 (10^{18})。通过这种方法,我们可以准确地重建满足所有操作条件的初始数组。
转载地址:http://wbrfk.baihongyu.com/