• Acwing 101 最高的牛 (差分数组)


    题面

    有 N 头牛站成一行,被编队为1、2、3…N,每头牛的身高都为整数。

    当且仅当两头牛中间的牛身高都比它们矮时,两头牛方可看到对方。

    现在,我们只知道其中最高的牛是第 P 头,它的身高是 H ,剩余牛的身高未知。

    但是,我们还知道这群牛之中存在着 M 对关系,每对关系都指明了某两头牛 A 和 B 可以相互看见。

    求每头牛的身高的最大可能值是多少。

    输入格式
    第一行输入整数N,P,H,M,数据用空格隔开。

    接下来M行,每行输出两个整数 A 和 B ,代表牛 A 和牛 B 可以相互看见,数据用空格隔开。

    输出格式
    一共输出 N 行数据,每行输出一个整数。

    第 i 行输出的整数代表第 i 头牛可能的最大身高。

    数据范围
    1≤N≤10000,
    1≤H≤1000000,
    1≤A,B≤10000,
    0≤M≤10000
    输入样例:
    9 3 5 5
    1 3
    5 3
    4 3
    3 7
    9 8
    输出样例:
    5
    4
    5
    3
    4
    4
    5
    5
    5

    思路

    让我们求每头牛的最高高度,那么我们首先考虑这样一个问题,给我一组关系,那么两个点中间的如果都恰好比两边小1,那么这个高度应该是最符合题意的。那么关键来了,我们似乎需要去做区间修改了,我们维护一个差分数组,并初始化第一个元素为最高高度h,然后根据对应的关系去修改区间,最后做一次前缀和操作。那么这个题目的话要注意,我们需要对元素进行一个判重的操作,那么我们用一个set去储存一个pair就可以了。所以我们判断一道前缀和或者是差分的重要依据就是是否存在一些简单的区间修改操作,或者显而易见的一些线性累加取最大值。

    代码实现

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<set>
    using namespace std;
    typedef long long ll;
    const int maxn=10010;
    int  a[maxn],n,p,h,m;
    int main () {
        cin>>n>>p>>h>>m;
        a[1]=h;
        set <pair <int,int> > q;
        for (int i=1,x,y;i<=m;i++) {
            cin>>x>>y;
            if (x>y) swap (x,y);
            if (!q.count (make_pair(x,y)) ){
                q.insert (make_pair (x,y));
                a[x+1]--; a[y]++;
            }
        }
        for (int i=2;i<=n;i++) a[i]+=a[i-1];
        for (int i=1;i<=n;i++) cout<<a[i]<<endl;
        return 0;
    }
    
  • 相关阅读:
    BestCoder6 1002 Goffi and Squary Partition(hdu 4982) 解题报告
    codeforces 31C Schedule 解题报告
    codeforces 462C Appleman and Toastman 解题报告
    codeforces 460C. Present 解题报告
    BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
    BestCoder3 1001 Task schedule(hdu 4907) 解题报告
    poj 1195 Mobile phones 解题报告
    二维树状数组 探索进行中
    codeforces 460B Little Dima and Equation 解题报告
    通过Sql语句控制SQLite数据库增删改查
  • 原文地址:https://www.cnblogs.com/hhlya/p/13308779.html
Copyright © 2020-2023  润新知