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;
    } 
  • 相关阅读:
    查看本机80端口占用方法
    LeetCode: Word Break II
    LeetCode: Word Break
    LeetCode: Sort List
    LeetCode: Single Number II
    LeetCode: Single Number
    LeetCode: Reorder List
    LeetCode: LRU Cache
    LeetCode: Max Points on a Line
    Insertion Sort List
  • 原文地址:https://www.cnblogs.com/lin4xu/p/12873546.html
Copyright © 2011-2022 走看看