POJ 3263 Tallest Cow

POJ 3263 Tallest Cow

题意

有n头牛,最高的牛是第i头并且它的高度为h,下面有r对牛(a,b),他们能够两两看见,能两两看见的前提是他们之间的牛都比它俩矮。求每头牛最高可能是多少?

题解

差分,先初始化数组ans为0,区间左右做标记,ans[a+1]--,ans[b]++,最后前缀和+h。(注意查重,a和b可能出现多次,但是只需要一次处理

#include <cstdio>
#include <map>
using std::map;

map<int,int>mp[10010];
int ans[10010];
int main() {
    int n, i, h, t, a, b;
    scanf("%d %d %d %d", &n, &i, &h, &t);
    while(t--) {
        scanf("%d %d", &a, &b);
        if(a > b) {
            int tmp = a;
            a = b;
            b = tmp;
        }
        if(mp[a][b] == 0) {
            mp[a][b] = 1;
            ans[a+1]--;
            ans[b]++;
        }
    }
    for(int i = 1; i <= n; i++) {
        ans[i] += ans[i-1];
        printf("%d\n", ans[i] + h);
    }
    return 0;
}

posted @ 2019-08-26 22:06  小饭hhh  阅读(105)  评论(0编辑  收藏  举报