TallestCow
简单解说
建立差分数组。
以最高的牛为高度基点,假设牛A和牛B能相互看见,就把牛A和牛B中间的牛高度都-1
最后对每头牛直接计算输出即可。
需要注意的是他给出的关系中:两头牛的顺序可能是颠倒的,而且关系可能是重复的
然后这题就没什么了
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
using namespace std;
const int maxn=20000000;
struct node{
int l,r;
bool operator <(const node& x)const{
if(l==x.l) return r<x.r;
return l<x.l;
}
}a[maxn];
int ans[maxn];
int main(){
int n,p,h,m;
cin>>n>>p>>h>>m;
for(int i=1;i<=m;i++){
scanf("%d %d",&a[i].l,&a[i].r);
if(a[i].l>a[i].r) swap(a[i].l,a[i].r);
}
sort(a+1,a+1+n);
for(int i=1;i<=n;i++){
if(a[i].l==a[i-1].l && a[i].r==a[i-1].r) continue;
ans[a[i].l+1]--;
ans[a[i].r]++;
}
int cnt=0;
for(int i=1;i<=n;i++){
cnt+=ans[i];
printf("%d\n",cnt+h);
}
return 0;
}
$$We're \; here \; to \; put \; a \; dent \; in \; the \; universe.$$