|
|
@ -85,6 +85,55 @@ int main() {
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
### [$P1083$ [$NOIP2012$ 提高组] 借教室](https://www.luogu.com.cn/problem/P1083)
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 暴力
|
|
|
|
|
|
|
|
还是先看暴力怎么做吧,对于$m$次借教室,我们可以每次把区间$s\sim t$的空教室数$r-=d$,当有一次$r<0$时,则当前这个人无法被满足,直接输出$-1$和当前这个人的号数,然后直接结束程序。如果$m$次借教室都操作完成后依然没有房间数$r<0$,则说明所有人都可以被满足,则输出$0$。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
综合上述做法,得分$60$。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```cpp {.line-numbers}
|
|
|
|
|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
int n, m;
|
|
|
|
|
|
|
|
const int N = 1000010;
|
|
|
|
|
|
|
|
int r[N];
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
|
|
|
cin >> n >> m;
|
|
|
|
|
|
|
|
// 每一天可租借教室数
|
|
|
|
|
|
|
|
for (int i = 1; i <= n; i++) cin >> r[i];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 从哪天到哪天,借多少个
|
|
|
|
|
|
|
|
for (int i = 1; i <= m; i++) {
|
|
|
|
|
|
|
|
int d, s, t;
|
|
|
|
|
|
|
|
cin >> d >> s >> t;
|
|
|
|
|
|
|
|
// 从开始天到结束天
|
|
|
|
|
|
|
|
for (int j = s; j <= t; j++) {
|
|
|
|
|
|
|
|
r[j] -= d; // 减去借走的教室数
|
|
|
|
|
|
|
|
if (r[j] < 0) { // 小于0了!
|
|
|
|
|
|
|
|
cout << -1 << endl
|
|
|
|
|
|
|
|
<< i << endl;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cout << 0 << endl;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
显然,这样做法的时间复杂度时$O(N*M)$的,无法通过此题,从而我们可以推知该题正确的时间复杂度应该是$log$级的。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 正解
|
|
|
|
|
|
|
|
既然时间复杂度时$log$级的,于是想到了二分。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
再看到每个人借教室的时间可以看成一个区间,且该区间只会对其他在该区间要借教室的人产生影响,对于区间之外的借教室的人是不会产生影响的,于是又想到了差分。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
差分序列:(可用于区间增减)记录相邻两个量的变化量,所以当在一段区间$[l,r]$上增加$a$时,只需要在$l$处加$a$,在$r+1$处$-a$即可。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
对于为什么可以二分:如果一个人无法被满足,则他后面的人全都不能被满足;如果一个人可以被满足,则他前面的人都可以被满足,这恰恰吻合了我们二分的性质。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### [$P3406$ 海底高铁](https://www.luogu.com.cn/problem/P3406)
|
|
|
|
### [$P3406$ 海底高铁](https://www.luogu.com.cn/problem/P3406)
|
|
|
|

|
|
|
|

|
|
|
|