计蒜客 木桩涂涂看
$n$ 个木桩排成一排,从左到右依次编号为 $1, 2, 3…n$。每次给定 $2$ 个整数 $a, b(a \leq b)$,蒜头君便骑上他的电动车从木桩 $a$ 开始到木桩 $b$ 依次给每个木桩涂一次颜色。但是 $n$ 次以后 lele 已经忘记了第 $i$ 个木桩已经涂过几次颜色了,你能帮他算出每个木桩被涂过几次颜色吗?
输入格式
第一行是一个整数 $n(n \leq 100000)$。 接下来的 $n$ 行,每行包括两个整数 $a, b (1 \leq a \leq b \leq n)$。
3 1 1 1 2 1 3
输出格式
$n$ 个整数,第 $i$ 个数代表第 $i$ 个木桩总共被涂色的次数。
3 2 1
这题就是一个裸的差分维护。
#include <bits/stdc++.h>
using namespace std;
int n = 0;
const int MAX_N = 100007;
int dif[MAX_N] = {0};
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int a, b;
scanf("%d%d", &a, &b);
dif[a]++;
dif[b + 1]--; // 维护差分
}
int ans = 0;
for (int i = 1; i <= n; i++) {
ans += dif[i];
printf("%d%c", ans, i == n ? '\n' : ' ');
}
return 0;
}
