1686 第K大区间(尺取+二分)
2024-09-28 12:35:24
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
定义一个区间的值为其众数出现的次数。
现给出n个数,求将所有区间的值排序后,第K大的值为多少。
Input
第一行两个数n和k(1<=n<=100000,k<=n*(n-1)/2)
第二行n个数,0<=每个数<2^31
Output
一个数表示答案。
Input示例
4 2
1 2 3 2
Output示例
2 //首先,考虑区间的值的性质,如果区间的值为 x ,那么,区间无论怎么左右扩展,区间的值必然大于等于 x 。
那么,计算区间的值大于等于 x ,可以用尺取在 O(n) 时间算出,显然,这是有单调性的,二分即可
# include <cstdio>
# include <cstring>
# include <cstdlib>
# include <iostream>
# include <vector>
# include <queue>
# include <stack>
# include <map>
# include <bitset>
# include <sstream>
# include <set>
# include <cmath>
# include <algorithm>
# pragma comment(linker,"/STACK:102400000,102400000")
using namespace std;
# define LL long long
# define pr pair
# define mkp make_pair
# define lowbit(x) ((x)&(-x))
# define PI acos(-1.0)
# define INF 0x3f3f3f3f3f3f3f3f
# define eps 1e-
# define MOD inline int scan() {
int x=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-') f=-; ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-''; ch=getchar();}
return x*f;
}
inline void Out(int a) {
if(a<) {putchar('-'); a=-a;}
if(a>=) Out(a/);
putchar(a%+'');
}
# define MX
/**************************/ int n,k;
int a[MX];
int b[MX];
int num[MX]; bool check(int x)
{
memset(num,,sizeof(num));
int l=,r=,flag=;
LL tot=;
while (r<=n+)
{
if (!flag)
{
if (r==n+) break;
num[a[r]]++;
if (num[a[r]]>=x) flag=r;
r++;
}
else
{
while (flag)
{
tot += n-r+;
num[a[l]]--;
if (num[a[flag]]<x) flag=;
l++;
}
}
}
if (tot>=k) return ;
return ;
} int main()
{
scanf("%d%d",&n,&k);
for (int i=;i<=n;i++)
{
scanf("%d",&a[i]);
b[i] = a[i];
}
sort(b+,b++n);
for (int i=;i<=n;i++)
a[i] = lower_bound(b+,b++n,a[i])-b; int l=, r=n;
int ans;
while (l<=r)
{
int mid = (l+r)>>;
if (check(mid)) ans=mid,l=mid+;
else r=mid-;
}
printf("%d\n",ans);
return ;
}
最新文章
- Razor Engine,实现代码生成器的又一件利器
- NHibernate生成实体类、xml映射文件
- JConsole监控远程Tomcat服务器
- 【转】Web标准中的常见问题
- [Windows Phone] 地图覆叠层控制项(MapOverlay )
- C语言变参函数的编写
- vscode: Visual Studio Code 常用快捷键
- 关于ios 程序加载百度地图lib,出现链接错误:找不到符号 (null): _OBJC_CLASS_$_BMKMapManager的解决办法
- [html] 学习笔记--Web存储
- Java 数组扩容
- js获取url地址栏参数
- ajax调用WebAPI添加数据
- Java笔试题库之选题题篇【141-210题】
- [JLOI2015]装备购买 (高斯消元)
- 非const引用不能指向临时变量
- JIRA python篇之统计产品尚未解决的bugs
- 微信小程序的图片懒加载
- 20179202《Linux内核原理与分析》第一周作业
- MAC OS 10.11.1虚拟机免费下载已安装Xcode7图片后有下载地址
- Google Java编程风格指南中文版(转)