Tallest Cow【模拟】

题目大意:

现在有 N 头奶牛,已知第 I 头牛是所有牛中最高的牛,身高为 H ;我们还知道 R 种关系,每一种关系包含的 a , b 表示第 a 头牛可以看见第 b 头牛(即第 b 头牛的身高不低于第 a 头牛的身高,并且它们中间的牛的身高都不高于 a 的身高),求每头牛的最高可能身高。


思路:

为了使答案最优,我们可以把两头能互相看见的牛之间的牛视为身高一样。
考虑前缀和,设左边的牛为1,右边的牛为+1,那么求完前缀和就用h减去即可。
注意!此题需要判重!map+pair走起~


代码:

#include <cstdio>
#include <iostream>
#include <map>
using namespace std;

int n,m,h,k,x,y,s[2000001];
map<pair<int,int>,bool> p;

int main()
{
    scanf("%d%d%d%d",&n,&m,&h,&k);
    for (int i=1;i<=k;i++)
    {
        scanf("%d%d",&x,&y);
        if (x>y)  //交换
        {
            int t=x;
            x=y;
            y=t;
        }
        if (p[make_pair(x,y)]) continue;  //判重
        p[make_pair(x,y)]=true;
        s[x+1]++;
        s[y]--;
    }   
    for (int i=1;i<=n;i++)
    {
        s[i]+=s[i-1];
        printf("%d\n",h-s[i]);
    }
    return 0;
}
posted @ 2018-08-13 11:00  全OI最菜  阅读(83)  评论(0编辑  收藏  举报