解题思路
如果x与y互相看见,那么他们一定比之间的高,所以给他们之间的高度-1,最后得到的答案是所有牛的高度+h,之间-1会T,用差分数组或线段树维护即可。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
using namespace std;
const int MAXN = 10005;
inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return f?x:-x;
}
int n,l,h,r,d[MAXN],a[MAXN];
map<pair<int,int>,bool> mp;
int main(){
n=rd(),l=rd(),h=rd(),r=rd();int x,y;
for(int i=1;i<=r;i++){
x=rd(),y=rd();
if(mp.count(make_pair(x,y))) continue;
mp[make_pair(x,y)]=1,mp[make_pair(y,x)]=1;
if(x>y) swap(x,y);
d[x+1]--,d[y]++;
}
for(int i=1;i<=n;i++)
d[i]+=d[i-1],printf("%d\n",d[i]+h);
return 0;
}