设计网站中如何设置特效/网推软件有哪些
题目地址:
https://www.luogu.com.cn/problem/P1047
题目描述:
某校大门外长度为lll的马路上有一排树,每两棵相邻的树之间的间隔都是111米。我们可以把马路看成一个数轴,马路的一端在数轴000的位置,另一端在lll的位置;数轴上的每个整数点,即0,1,2,…,l0,1,2,…,l0,1,2,…,l,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入格式:
第一行有两个整数,分别表示马路的长度lll和区域的数目mmm。接下来mmm行,每行两个整数u,vu, vu,v,表示一个区域的起始点和终止点的坐标。
输出格式:
输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。
数据范围:
对于20%20\%20%的数据,保证区域之间没有重合的部分。
对于100%100\%100%的数据,保证1≤l≤1041≤l≤10^41≤l≤104,1≤m≤1001≤m≤1001≤m≤100,0≤u≤v≤l0≤u≤v≤l0≤u≤v≤l。
可以用差分数组来做。代码如下:
#include <iostream>
using namespace std;int a[10010];int main() {int l, m;scanf("%d%d", &l, &m);while (m--) {int x, y;scanf("%d%d", &x, &y);a[x]++, a[y + 1]--;}for (int i = 1; i <= l; i++) a[i] += a[i - 1];int res = 0;for (int i = 0; i <= l; i++) if (!a[i]) res++;printf("%d\n", res);return 0;
}
时间复杂度O(m+l)O(m+l)O(m+l),空间O(1)O(1)O(1)。