HDU 6231 (K-th Number)

题目链接:https://cn.vjudge.net/problem/HDU-6231

思路:二分+双指针;

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>

using namespace std;
typedef long long int LL;


const int INF=2e9+1e8;
const int maxn=1e5+100;
int a[maxn],b[maxn];

int n,k;
LL m;
LL calc(int x) //计算区间第k大的数大于等于x的区间个数
{
    LL ans=0;
    int l=0,r=-1,num=0;
    while(r<n)
    {
        if(num<k)
        {
            if(a[r+1]>=x) num++;
            r++;
        }
        else 
        {
            if(num==k) ans+=n-r;
            if(a[l]>=x) num--;
            l++;
        }
    }
    return ans;
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d%lld",&n,&k,&m);
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]),b[i]=a[i];
        sort(b,b+n);
        int len=unique(b,b+n)-b;
        int l=0,r=len-1,ans=-1;
        while(l<=r)
        {
            int mid=(l+r)>>1;
            if(calc(b[mid])>=m) ans=b[mid],l=mid+1;
            else r=mid-1;
        }
        printf("%d\n",ans);
    }
    return 0;
}
posted @   Code-dream  阅读(392)  评论(0编辑  收藏  举报
编辑推荐:
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
· golang自带的死锁检测并非银弹
· 如何做好软件架构师
阅读排行:
· 欧阳的2024年终总结,迷茫,重生与失业
· 聊一聊 C#异步 任务延续的三种底层玩法
· 上位机能不能替代PLC呢?
· 2024年终总结:5000 Star,10w 下载量,这是我交出的开源答卷
· .NET Core:架构、特性和优势详解
点击右上角即可分享
微信分享提示