思路:
初始:所有马都高为h
a,b区间内能相互看见,即a,b之间没有高于min(a,b)的马,即差分数组c[a+1]--,c[b]++。
(注意a和b大小关系的判断)
代码:
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 5e6 + 10; int n, h, f; int a, b; int c[N]; int d[N]; int main() { cin >> n >> h >> f; for (int i = 1; i <= f; i++) { cin >> a >> b; if (a == b) continue; if (a > b) swap(a, b); c[a + 1]--, c[b]++; // 差分数组c } d[1] = h; cout << d[1] << endl; for (int i = 2; i <= n; i++) { d[i] = d[i - 1] + c[i]; cout << d[i] << endl; } return 0; }