zoukankan      html  css  js  c++  java
  • 题目分享K 二代目

    题意:n个奶牛,最高的奶牛i高h,有m对约束,每个约束x,y表示x+1~y-1所有的奶牛都要比x和y奶牛要矮,求所有奶牛的最大身高

    分析:

    首先肯定先把所有奶牛的H设为h

    对于第一条约束来说,显然只需要把H[x+1]~H[y-1]全部减一即可

    那么对于第二条约束来说,如果这条约束与第一条不相交,显然与第一条的处理方法是一样的

    那么如果与第一条约束相交会怎么样呢?

    这里可能就有很多人想不明白了

    其实,他们不可能相交,只可能会包含,

    因为显然,如果两个约束相交一定是不符合题意的,

    比如x2<x1<y2<y1

    显然第一条规定使得H[y2]<x1,y1

    而第二条规定使得H[x1]<x2,y2

    显然矛盾

    那么包含的时候如何处理呢?

    显然也是和第一条处理方法是一样的

    而这个处理方法是区间都减一

    显然可以用差分

    还有一个小细节就是约束可能重复,所以还需要用map去一下重

    代码:

    #include<cstdio>
    #include<algorithm>
    #include<map>
    using namespace std;
    
    const int maxn=2e4+1;
    
    int a[maxn];
    map<pair<int,int>,bool> mapp;
    
    int main()
    {
        int n,p,h,m,x,y;
        scanf("%d%d%d%d",&n,&p,&h,&m);
        while(m--)
        {
            scanf("%d%d",&x,&y);
            if(x>y) swap(x,y);
            if(mapp[make_pair(x,y)]) continue;
            mapp[make_pair(x,y)]=1;
            a[x+1]--;a[y]++;
        }
        for(int i=1;i<=n;i++) a[i]+=a[i-1],printf("%d
    ",a[i]+h);
        return 0;
    } 
  • 相关阅读:
    娓娓道来c指针 (4)解析c的声明语句
    Snail—UI学习之UITextField
    E
    Qt录音机
    著名的英文搜索引擎
    java中Map,List与Set的差别
    Android图片处理:识别图像方向并显示
    Unity3D中组件事件函数的运行顺序
    Android屏幕density, dip等相关概念总结
    Codeforces Round #257 (Div. 2)
  • 原文地址:https://www.cnblogs.com/lin4xu/p/12873546.html
Copyright © 2011-2022 走看看