题目连接
题意:
N个气球 1 到 N 编号
然后接下来N行 ,每行给2个整数 a b,
从a到b依次给每个气球涂一次颜色,
N次后操作后忘记了第 i 个气球涂过几次颜色了
问算出每个气球被涂过几次颜色
思路:
数据范围 N 1e5 1 <= a, b <= N 时间 3e9
区间操作和单点查询
1)线段树 区间操作 都是log(2)N
2)差分数组 区间操作 O(1) 全部查询 O(N)
AC:
#include<iostream>
#include<cstring>
#include<math.h>
#include<algorithm>
using namespace std;
const int maxn = 1e5;
int F[maxn + 10];
int main() {
//freopen("in.txt", "r", stdin);
int N;
while(scanf("%d", &N) && N != 0) {
int L, R;
for(int i = 0; i <= N; ++i) {
F[i] = 0;
}
for(int i = 1; i <= N; ++i) {
scanf("%d%d", &L, &R);
F[L] += 1;
F[R + 1] -= 1;
}
int Temp = 0;
for(int i = 1; i <= N; ++i) {
Temp += F[i];
if(i == N)
printf("%d", Temp);
else
printf("%d ", Temp);
}
printf("\n");
}
return 0;
}