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;
}
posted @ 2020-05-16 13:57  zfio  阅读(106)  评论(0编辑  收藏  举报