代码
看代码,我觉得很清晰
#include <iostream>
#include <set>
using namespace std;
const int N = 10010;
int a[N]; // 差分数组
void insert(int l, int r, int c) {
a[l] += c;
a[r + 1] -= c;
}
int main() {
int n, p, h, m;
cin >> n >> p >> h >> m;
a[0] = h; // 把整个差分数组变为最高的
set<pair<int, int>> exist; // 用于去重
for (int i = 1, a, b; i <= m; i++) {
cin >> a >> b;
if (a > b) swap(a, b);
if (!exist.count({a,b})) {
exist.insert({a, b});
insert(a + 1, b - 1, -1); // a能看见b,所以a+1到b-1的牛都比这俩头矮
}
}
for (int i = 1; i <= n; i++) {
a[i] += a[i - 1];
cout << a[i] << endl;
}
return 0;
}