201809-2买菜
题目
题目链接:买菜
思路:前缀和
看到题目,第一想法就是前缀和
,为什么?因为他要求两人装车的时间重叠的那一部分,然后我们用差分数组对他们装车的时间进行标记,然后两个标记重叠部分就是他们交流的时间。
但是,差分时要注意一点,我们差分处理的是一个时间点,而实际的时间是一个时间段,那我们怎么办呢?我们可以采用前闭后开的形式进行差分操作。比如,9点到10点这个时间段,我只对时间点9进行标记,代表一个9点到10点这一个小时。为什么不能右端点也闭合呢?因为如果你对右端点也进行标记的话,假如10点刚好是第一个人装车结束的时间,又是第二个人开始装车的时间,他们这时是不能交流的,但是你算进去了,所以会导致答案的错误。
代码
/* 买菜 */
#include
using namespace std;
const int N = 1e6 + 10;
int dif[N],arr[N], n;
void add(int l, int r) { dif[l]++, dif[r]--; }
int s, t;
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> s >> t;
add(s,t);
}
for (int i = 0; i < n; i++) {
cin >> s >> t;
add(s,t);
}
for(int i=1;i
不知道前缀和的小伙伴看这里
不知道前缀和是什么的朋友可以到我之前的文章查看了解哦