1686 第K大区间
定义一个区间的值为其众数出现的次数。
现给出n个数,求将所有区间的值排序后,第K大的值为多少。
第一行两个数n和k(1<=n<=100000,k<=n*(n-1)/2)
第二行n个数,0<=每个数<2^31
一个数表示答案。
4 2
1 2 3 2
2
思路:二分答案t,统计众数出现次数大于等于t的区间有多少个。
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<stack>
7 #include<map>
8 #include<math.h>
9 using namespace std;
10 typedef long long LL;
11 int id[100005];
12 int cnt[100005];
13 int cp[100005];
14 int str[100005];
15 LL tt[100005];
16 typedef struct pp
17 {
18 LL x;
19 int id;
20 } ss;
21 ss ans[100005];
22 LL check(int mid);
23 bool cmp(pp n,pp m)
24 {
25 return n.x<m.x;
26 }
27 LL n,m;
28 int main(void)
29 {
30 int i,j,k;
31 while(scanf("%lld %lld",&n,&m)!=EOF)
32 {
33 memset(cnt,0,sizeof(cnt));
34 for(i=1; i<=n; i++)
35 {
36 scanf("%lld",&ans[i].x);
37 ans[i].id=i;
38 }
39 LL nn=ans[1].x;
40 int mm=1;
41 sort(ans+1,ans+n+1,cmp);
42 for(i=1; i<=n; i++)
43 {
44 if(ans[i].x!=nn)
45 {
46 mm++;
47 nn=ans[i].x;
48 }
49 tt[ans[i].id]=mm;
50 }
51 for(i=1;i<=n;i++)
52 {
53 ans[i].x=tt[i];
54 }
55 int maxx=0;
56 for(i=1; i<=n; i++)
57 {
58 cnt[ans[i].x]++;
59 if(maxx<cnt[ans[i].x])
60 {
61 maxx=cnt[ans[i].x];
62 }
63 }
64 int l=1;
65 int ask=1;
66 int r=maxx;
67 while(l<=r)
68 {
69 int mid=(l+r)/2;
70 LL ak=check(mid);
71 LL cnt1=(n)*(n-1)/2;
72 if(ak>=m)
73 { ask=mid;
74 l=mid+1;
75 }
76 else
77 { r=mid-1;
78
79 }
80 }printf("%d\n",ask);
81 }
82 return 0;
83 }
84 LL check(int mid)
85 {
86 int i,j,k;
87 LL sum=0;
88 if(mid==1)
89 return n*(n-1)/2;
90 else
91 {
92 memset(id,0,sizeof(id));
93 memset(cnt,0,sizeof(cnt));
94 memset(str,0,sizeof(str));
95 cnt[ans[1].x]++;str[ans[1].x]=1;id[1]=0;
96 for(i=2; i<=n; i++)
97 {
98 cnt[ans[i].x]++;
99 if(cnt[ans[i].x]==1)
100 {
101 str[ans[i].x]=i;
102 id[i]=0;
103 }
104 else if(cnt[ans[i].x]==mid)
105 {
106 id[i]=str[ans[i].x];
107 }
108 else if(cnt[ans[i].x]<mid)
109 {
110 id[i]=0;
111 }
112 else if(cnt[ans[i].x]>mid)
113 {
114 while(cnt[ans[i].x]>mid)
115 {
116 str[ans[i].x]++;
117 if(ans[str[ans[i].x]].x==ans[i].x)
118 {
119 cnt[ans[i].x]--;
120 break;
121 }
122 }id[i]=str[ans[i].x];
123 }
124 }
125 int L=0;
126 LL sum=0;
127 for(i=1; i<=n; i++)
128 {
129 L=max(L,id[i]);
130 sum+=L;
131
132 }printf("\n");
133 return sum;
134 }
135 }
1686 第K大区间的更多相关文章
- 51nod 1686 第k大区间
1686 第K大区间 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. ...
- 1686 第K大区间(尺取+二分)
1686 第K大区间 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. ...
- 51nod 1686 第K大区间2
1685 第K大区间2 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. 众数(统计学/数学名词)_百度百科 Input 第一行两个数n和k(1<=n ...
- 51NOD 1686 第K大区间 二分
第k大区间 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. Input 第一行两个数n和k(1<=n<=100000,k<=n* ...
- 51Nod——T 1686 第K大区间
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 ...
- 51nod 1686 第K大区间【离散化+二分】
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 题意: 定义一个区间的值为其众数出现的次数. 现给出n ...
- 51Nod 1686 第K大区间(离散化+尺取法)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 题意: 思路: 第K大值,所以可以考虑二分法,然后用尺取法去扫描, ...
- 【题解】51nod 1686第K大区间
成功的秘诀,在于克服自己看题解的冲动……[笑哭].自己A掉这题还是灰常开心的~ 以及爱死 two - pointer ! two - pointer 大法是真的好哇……这个题目有上一题的经验:求第\( ...
- 51nod 1686 第K大区间 二分瞎搞
题目: 定义一个区间的值为其众数出现的次数. 现给出n个数,求将所有区间的值排序后,第K大的值为多少. 题解: 答案明显单调,我们考虑二分答案. 转化为判定问题后我们需要观察到一个性质: 如果一个区间 ...
随机推荐
- 【Python机器学习实战】聚类算法(1)——K-Means聚类
实战部分主要针对某一具体算法对其原理进行较为详细的介绍,然后进行简单地实现(可能对算法性能考虑欠缺),这一部分主要介绍一些常见的一些聚类算法. K-means聚类算法 0.聚类算法算法简介 聚类算法算 ...
- A Child's History of England.6
It was a British Prince named Vortigern who took this resolution, and who made a treaty of friendshi ...
- 【TCP/IP】之Java socket编程API基础
Socket是Java网络编程的基础,深入学习socket对于了解tcp/ip网络通信协议很有帮助, 此文讲解Socket的基础编程.Socket用法:①.主要用在进程间,网络间通信. 文章目录如下: ...
- Output of C++ Program | Set 15
Predict the output of following C++ programs. Question 1 1 #include <iostream> 2 using namespa ...
- Spring支持5种类型的增强
Spring支持5种类型的增强:1.前置增强:org.springframework.aop.BeforeAdvice代表前置增强,因为Spring只支持方法级的增强,所以MethodBeforeAd ...
- 【编程思想】【设计模式】【结构模式Structural】3-tier
Pyhon版 https://github.com/faif/python-patterns/blob/master/structural/3-tier.py #!/usr/bin/env pytho ...
- 3.3 GO字符串处理
strings方法 index 判断子字符串或字符在父字符串中出现的位置(索引)Index 返回字符串 str 在字符串 s 中的索引( str 的第一个字符的索引),-1 表示字符串 s 不包含字符 ...
- spring下春注解的声明式事务控制
package com.hope.test;import com.hope.domain.Account;import com.hope.service.IAccountService;import ...
- 9.Vue.js 监听属性
本章节,我们将为大家介绍 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化. 以下实例通过使用 watch 实现计数器: <div id = "app&q ...
- 莫烦python教程学习笔记——总结篇
一.机器学习算法分类: 监督学习:提供数据和数据分类标签.--分类.回归 非监督学习:只提供数据,不提供标签. 半监督学习 强化学习:尝试各种手段,自己去适应环境和规则.总结经验利用反馈,不断提高算法 ...