摘要: 按身高排序,每个人前面最高的人数有上限,如果超出上限说明impossible,每次考虑最小的人,把他放在在当前的从左往右第k+1个空位因为要求字典序最小,所以每次k和(上限-k)取min值。没有修改操作,只有删除,可用线段树维护空位数量s,每次类似名次树判断一下第k个空位在哪颗子树上(原来这叫划分树... 阅读全文
posted @ 2015-09-27 20:45 陈瑞宇 阅读(381) 评论(0) 推荐(0) 编辑
摘要: 定义f[i]表示以i为开头往后的最长上升子序列,d[i]表示以i为结尾的最长上升子序列。先nlogn算出f[i],从i-L开始枚举f[i],表示假设i在最终的LIS中,往[0,i-L)里找到满足ai>aj中dj值最大的。用dj+f[i]更新。但是这样会少考虑一种情况,即i-L以后都不在最终的LIS里... 阅读全文
posted @ 2015-09-27 18:18 陈瑞宇 阅读(331) 评论(5) 推荐(0) 编辑
摘要: 从D+1开始,对于一个数x,区间[x,x+lowbit(x))内的数字的二进制位上1的数量整体来说是单调不减的,因此可快速得出1在这个区间的取值范围。每次判断一下有没有和[s1,s2]有没有交集,一旦发现解就贪心最小的一个。复杂度是O(T*log(ans-D))#includeusing names... 阅读全文
posted @ 2015-09-27 18:12 陈瑞宇 阅读(403) 评论(0) 推荐(0) 编辑