qbxt 突破营 Day1

发布时间 2023-10-08 14:36:40作者: FOX_konata

小K很喜欢摸鱼,但他不幸地来到卷王大学学习。他的学习生活可以抽象化成一个如下的过程:一个学期一共有\(n\)天,每一天上午上完课之后,老师会布置\(k_i\)个作业,他们的ddl是\(d_{i,1},d_{i,2},...,d_{i,k_i}\),一个ddl是\(d\)的作业需要在第\(d\)天的23:59完成,而小K的能力只能允许他每天下午写一项作业,而晚上则要用来摸鱼。

小K会按照以下方式处理作业,假设当前位于第\(i\)天,老师已经布置且未完成的作业集合为\(S\)。那么小K会计算,如果今天下午不做作业也能在不新增作业的前提下在以后完成\(S\)内的所有作业(每天最多完成一个),那么今天就不做作业,否则就做作业,做的作业是ddl离当前最近的。比如当前是第\(2\)天,作业的ddl是\(\{3,4,5\}\),那么今天就可以不做作业,因为不新增作业的情况下之后一天一个就行。但如果作业ddl是\(\{3,3,4\}\)则今天必须做一个ddl为\(3\)的作业,不然第\(3\)天就会有两个当天ddl的作业。而如果作业ddl是\(\{2,2,2\}\),虽然小K此时无论如何也无法避免无法上交作业的惨剧,但他还是会做掉其中一个。注意,一个错过ddl的作业会被小K永久丢弃掉,后面再也不会做它(反正做了也没啥用。

显然这个策略有可能造成作业的无法上交,你作为先知,知晓这个学期所有的作业布置时间和ddl,想知道他学期结束的时候有多少个作业会错过ddl。

对于所有数据,\(1 \leq n \leq 10^5, 1 \leq \sum_{i=1}^n k_i \leq 2\times 10^5\)\(i\leq d_{i,j}\leq n\)

考场思路:ddl绝对时间判断是困难的,考虑转换成相对时间,即从现在开始后面几天后上交作业。发现对于所有未上交的作业从小到大排序,如果存在 \(a_i - rank(a_i) = 0\) ,则这个时间必须做作业,否则可以不做;如果 \(a_i - rank(a_i) < 0\) ,则这个作业不可能被做完,就可以直接删掉了。于是考虑维护值域线段树,对于添加一个数等价于查询前缀数的个数+后缀全局 \(+1\) ,找到最小的数的位置可以在最小值时维护下标(但我考试时脑子晕写了线段树二分),复杂度 \(O(n \log n)\) ,大常数

std:对于第 \(i\) 天的 ddl ,对第 \(i\) 天打一个 \(+1\) 标记,对每一天打一个 \(-1\) 标记。问题即转化成是否存在一个前缀和 \(> 0\) 。线段树维护前缀和,添加ddl和做作业等价于区间修+全局 \(\min\)

也有 \(O(n \alpha(n))\) 的并查集做法。考虑对于一个作业 \(x\) 他如果能在第 \(x\) 天做肯定做,不能做就找前面第一个没有作业的位置,然后合并上去。并查集