码迷,mamicode.com
首页 > 其他好文 > 详细

【POJ3263】Tallest Cow

时间:2018-08-28 21:19:07      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:整数   查询   等价   位置   并且   clu   i++   mes   stream   

题面

FJ的N头奶牛按序号1..N排成一排。 每头奶牛都有正整数高度。 你只被告知最高的奶牛的高度H(1≤H≤1,000,000)以及该奶牛的位置P.

FJ已经列出了“牛17看到牛34”形式的R(0≤R≤10,000)行。 这意味着奶牛34至少与奶牛17一样高,并且17至34之间的每头奶牛的高度严格小于奶牛17的高度。

对于来自1..N的每头奶牛,确定其最大可能高度,以便给出的所有信息仍然正确。 保证可以满足所有约束条件。

分析

如果i和j可以互相看到,说明i+1~j-1的奶牛至少都比i和j矮1个单位,所以只需要区间修改i+1~j-1即可,显然差分最简便

没有比最高的奶牛还高的奶牛,所以最高的奶牛的高度一定是0,最后求前缀和查询。

写的比较好看的是判重操作,再加上makepair,很方便。

需要注意的是差分的下标,在l+1位置-1,r位置+1,才等价于修改l+1~r-1

#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
using namespace std;
int n,p,h,m;
#define N 10100
map<pair<int,int>,bool>flag;
int a[N],c[N],s[N];
int main()
{
    scanf("%d%d%d%d",&n,&p,&h,&m);
    for(int i=1;i<=m;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        if(x>y)swap(x,y);
        if(flag[make_pair(x,y)])continue;
        c[x+1]--;c[y]++;
        flag[make_pair(x,y)]=1;
    }
    for(int i=1;i<=n;i++)
    {
        s[i]=s[i-1]+c[i];
        printf("%d\n",s[i]+h);
    }
    return 0;
}

 

【POJ3263】Tallest Cow

标签:整数   查询   等价   位置   并且   clu   i++   mes   stream   

原文地址:https://www.cnblogs.com/NSD-email0820/p/9550592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!