zoukankan      html  css  js  c++  java
  • 牛客网在线编程_有序矩阵中第K小的元素

    Leetcode378原题,所以一样没有数据范围...(

    • log(max-min)二分答案,然后NlogN二分每一行求出小于答案的元素个数,为了保证二分的答案在矩阵中,二分写的要和平常不太一样,最后输出的是l。
    • 感觉这是个经典题应该有更好的方法,但是搜了一圈好像没有...

    code

    #include <bits/stdc++.h>
    using  namespace std;
    const int N=1e4+50;
    int a[N][N];
    int k,n;
    int count(int x){
        int ans=0;
        for(int i=1;i<=n;i++){
            int l=1,r=n;
            int cnt=0;
            while(l<=r){
                int mid=(l+r)/2;
                if(a[i][mid]<=x){
                    cnt=mid;
                    l=mid+1;
                }else{
                    r=mid-1;
                }
            }
            ans+=cnt;
        }
        return ans;
    }
    int main(){
        scanf("%d%d",&k,&n);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                scanf("%d",&a[i][j]);
            }
        }
        int l=a[1][1],r=a[n][n];
        while(l<r){
            int mid=(l+r)/2;
            int cnt=count(mid);
            if(cnt<k){
                l=mid+1;
            }else{
                r=mid;
            }
        }
        printf("%d
    ",l);
        return 0;
    }
    
  • 相关阅读:
    java基础_面试题笔记
    ACM-ICPC 2018 Xuzhou Online Contest题解
    覆盖点问题总结
    2018icpc沈阳网络赛题解(转发)
    树链剖分
    树状数组
    线段树板子
    sdoi2016生成魔咒
    洛谷3804
    大佬博文收集
  • 原文地址:https://www.cnblogs.com/zxcoder/p/12261679.html
Copyright © 2011-2022 走看看