• [STL离散化]Skyscrapers的lower_bound系列


    总觉得再不整理就会错失一亿个题(不是

    首先  lower_bound(arr,arr+len,x)  返回第一个不小于x的位置

        upper_bound(arr,arr+len,x)  第一个大于x的位置

        unique(arr,arr+len)  全部不同的元素的最后一个的位置,所以我们想知道有多少个不同的元素的时候  n=unique(arr,arr+len)-arr(根据起始下标决定要不要+-1);啊记得要sort啊╰(*°▽°*)╯

    那么离散化的时候,重复元素的值就会相同了(显然我们用unique只记一次)

        CF-#545  C.Skyscrapers

          考虑怎么数大小考虑了一个下午,整了三个数组记录大小发现根本搞不过来,为什么我完全想不到lower_bound这种东西呢嘤(因为不会啦!)

          总之第几小的话就是lower_bound-arr+1啦

          二维数组的lower_bound还是第一次写呢,面白owo

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    int n, m;
    int a[1005][1005], b[1005][1005], mat[1005][1005];
    int mc[1005],mr[1005];
    
    int main()
    {
        cin >> n >> m;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++) {
                scanf("%d", &a[i][j]);
                b[j][i] = mat[i][j] = a[i][j];
            }
        for (int i = 0; i < n; i++)
            sort(a[i], a[i] + m), mr[i] = unique(a[i], a[i] + m) - a[i];
        for (int i = 0; i < m; i++)
            sort(b[i], b[i] + n), mc[i] = unique(b[i], b[i] + n) - b[i];
        for (int i = 0; i < n; i++,cout<<endl)
            for (int j = 0; j < m; j++) {
                int p = lower_bound(a[i], a[i] + mr[i], mat[i][j]) - a[i];
                int q = lower_bound(b[j], b[j] + mc[j], mat[i][j]) - b[j];
                cout << max(p, q) + max(mr[i] - p, mc[j] - q) << " ";
            }
    
        return 0;
    }
    skyscrapers

          有几个小细xia节biao要注意:

          因为我们用第一维+n/m来排unique,所以用于对列的那个组的两维下标需要交换位置;

          因为是枚举行,sort该行的列所以是for(0,n)arr+m,枚举列时同理;

          在最后的那个循环里行就是i,列就是j,不要混用。

    下一次补一下lb和ub用得最魔鬼的华师校赛F题巩固一下好了。首先,要安然考完高数期中考_(:з」∠)_

          

  • 相关阅读:
    python面向对象-3类的静态方法和类方法
    python面向对象-2深入类的属性
    python面向对象-1方法、构造函数
    python小练习--函数调用函数,让对象具有能动性
    python小练习--属性
    python面向对象开发的自我理解
    python入门前的准备
    python类的继承-1
    有关孔隙比的基本概念和计算公式
    一维固结试验过程
  • 原文地址:https://www.cnblogs.com/non-/p/10914681.html
Copyright © 2020-2023  润新知