最高的牛
https://www.acwing.com/problem/content/103/
思路:当每两头牛建立联系的时候,它们之间(不包含二者)的牛的高度最高为它们的高度减1
利用差分数组a[]
,设牛x和牛y可以相互看到(x < y),则a[x + 1] --
,a[y] ++
注意这题关系可能重复,可以用set集合存储
#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
const int N = 5e3 + 5;
int n, p, h, m;
int a[N];
set<PII> look;
int main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> p >> h >> m;
a[1] = h;
while(m --){
int x, y;
cin >> x >> y;
if(x > y) swap(x, y);
if(!look.count({x, y})){
a[x + 1] --, a[y] ++;
look.insert({x, y});
}
}
for(int i = 1; i <= n; i ++){
a[i] += a[i - 1];
cout << a[i] << '\n';
}
return 0;
}