zoukankan      html  css  js  c++  java
  • 【POJ3263】Tallest Cow

    题面

    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
    ",s[i]+h);
        }
        return 0;
    }
    “Make my parents proud,and impress the girl I like.”
  • 相关阅读:
    窗口总在最前的时候信息框弹出解决
    IP地址与子网掩码知识
    六类线、五类线、超五类线有什么区别?
    如何删除internet网关连接图标
    密码输入框用“●”做遮盖符
    万象2004数据库说明
    客户机绑定路由例子bat
    命令行下导入、导出注册表
    网管维护常用命令
    hadoop shell 操作命令
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9550592.html
Copyright © 2011-2022 走看看