试题 历届真题 双向排序【第十二届】【省赛】【B组】
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
分析:
一看题,对区间修改查询,想到线段树,但是如何定义状态呢?一开始想到维护差分,但是模拟了几次,发现没规律,然后又对着原数组模拟,发现如下规律:
1.数组就两个状态,前半段是降区间,后半段是升区间,考虑记录每个数是属于升区间还是降区间。用1 表示升区间,0表示降区间。
2.对每个有意义的操作(没意义的操作就是,例如输入0 5,但是前5个甚至前10个数都是降的,这个就是没意义的),无论是改成升序列 还是降序列,都是尽可能的改变小的,靠近1的值。这个可以自行模拟试一试,提示到这里了,希望读者能画一画。
上代码:
n,m=map(int,input().split())
class node():