2019.10.20日常总结兼洛谷P1083题题解

【题目链接】: http://www.luogu.org/problem/P1083
【题意】:
2019.10.20日常总结兼洛谷P1083题题解_第1张图片
【数据范围】:
2019.10.20日常总结兼洛谷P1083题题解_第2张图片
【思路】: 我们可以发现,申请得越多,越难满足所有的要求。
所以,这道题有单调性,即我们可以二分。具体而言,就是二分出一个答案 m i d mid mid,判断第 1 1 1 m i d mid mid条申请是否可以满足。
a [ i ] a[i] a[i]表示第 i i i天需要多少教室,每一条申请可以视为把 a [ s [ i ] . . t [ i ] ] a[s[i]..t[i]] a[s[i]..t[i]]都加上 d [ i ] d[i] d[i]。细细一想,诶,这不就是差分的直接应用吗?所以,在判定的时候,我们可以用差分优化,最后利用前缀和还原原数组,判定每一天是否超过可供应的教室数量,把判定的时间复杂度从 O ( n × m i d + n ) O(n \times mid + n) O(n×mid+n),降为 O ( m i d + n ) O(mid+n) O(mid+n)
【代码】:
2019.10.20日常总结兼洛谷P1083题题解_第3张图片
2019.10.20日常总结兼洛谷P1083题题解_第4张图片
【补充】: 代码中的 r e a d ( ) read() read()函数是快读函数,考虑到篇幅问题,因为大家都会了,这里不给出代码。
【引申】:
由本题我们可以发现一些东西:
( 1 ) . (1). (1).真正的二分部分其实很短,所以二分题目的难度一般都在判定。
( 2 ) . (2). (2).差分和前缀和虽然很少单独作为一道题的考点,但它们可以用来优化很多的题目,这就是它们的重要性,所以我们一定要掌握它们。

你可能感兴趣的:(原创)