• c_aw_最高的牛(差分+区间处理)


    当且仅当两头牛中间的牛身高都比它们矮时,两头牛方可看到对方。
    现在,我们只知道其中最高的牛是第 P 头,它的身高是 H ,剩余牛的身高未知。
    但是,我们还知道这群牛之中存在着 M 对关系,每对关系都指明了某两头牛 A 和 B 可以相互看见。
    求每头牛的身高的最大可能值是多少。

    方法一:差分

    • 每头牛都要最高高度,所以两头牛之间的牛最优的情况是只比每个区间端点的牛矮1;
    • 会不会存在两组之间交叉看到的情况呢?答案是不可能的,证明:有四头牛a、b、c、d:假设ac能相互看到,则a,c>b;bd互看,则b,d>c,这与第一点互斥了,所以不存在交叉看的情况;
    • 题目给我们一个区间[a,b],我们就应该把区间[a+1,b-1]中的牛的高度都减去1,表示比最大高度小1;

    注:1. 输入的两个数不保证升序;2. 且有重复输入,需要判重

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+5;
    int mp[N], s[N];
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int n,p,h,m; cin>>n>>p>>h>>m;
    
        for (int i=0; i<m; i++) {
            int a,b; cin>>a>>b;
            if (a>b) swap(a,b);
            if (mp[a]!=b) {
                s[a+1]--, s[b]++;
                mp[a]=b;
            }
        }
        for (int i=1; i<=n; i++) s[i]+=s[i-1];
        for (int i=1; i<=n; i++) cout<<(s[i]+h)<<'
    ';
        return 0;
    }
    
  • 相关阅读:
    宏观经济指标
    线程与进程 concurrent.futures模块
    python 进程和线程(2)
    进程和线程(1)
    C++学习
    原则阅读笔记
    python类(3)感悟
    python类(2)
    打新股技巧
    python连接数据库
  • 原文地址:https://www.cnblogs.com/wdt1/p/13724187.html
Copyright © 2020-2023  润新知