成功的秘诀,在于克服自己看题解的冲动……【笑哭】。自己A掉这题还是灰常开心的~

  以及爱死 two - pointer ! two - pointer 大法是真的好哇……这个题目有上一题的经验:求第\(K\) 大 --> 二分第 \(K\) 大的值 --> 检验当前二分的值排名是第几。而这样之所以可以解决问题在于:直接求第 \(K\) 并不好求,而检验一个值的排名却相对容易。所以我们现在的问题就转化为了如何计算出区间的值 \(>= mid\) 的区间的个数?

  做题之前先找规律 & 性质。这里我们注意到:如果我们固定一个右端点,那么区间的值是随着区间的长度单调不减的。……好像和 two - pointer有点像?如果当前的 \(l --> r\) 区间满足区间的值 \(>= mid\), 则 \(1 -- > l - 1\) 也同样是满足的。这样,只需要在找到第一个 \(l, r\)之后不断右移左端点就可以了。计算区间众数可以采取和莫队一样的处理方法。

  以及……要开 long long??? 我也不知道发生了什么……

#include <bits/stdc++.h>
using namespace std;
#define maxn 200000
#define int long long
int n, tot, K, now, a[maxn], b[maxn];
int ans, num[maxn], cnt[maxn];
map <int, int> Map; int read()
{
int x = , k = ;
char c; c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} void Add(int x)
{
num[cnt[a[x]]] --; cnt[a[x]] ++; num[cnt[a[x]]] ++;
if(cnt[a[x]] > now) now = cnt[a[x]];
} void Minus(int x)
{
if(now == cnt[a[x]] && num[cnt[a[x]]] <= ) now --;
num[cnt[a[x]]] --; cnt[a[x]] --; num[cnt[a[x]]] ++;
} bool Check(int mid)
{
memset(num, , sizeof(num));
memset(cnt, , sizeof(cnt));
now = ; int ans = ;
for(int l = , r = ; r <= n; r ++)
{
if(now < mid) Add(r);
while(l <= r && now >= mid) Minus(l), l ++;
ans += l - ;
}
if(ans >= K) return ;
else return ;
} signed main()
{
n = read(), K = read();
for(int i = ; i <= n; i ++) a[i] = b[i] = read();
sort(b + , b + + n); b[] = -;
for(int i = ; i <= n; i ++)
if(b[i] != b[i - ]) Map[b[i]] = ++ tot;
for(int i = ; i <= n; i ++) a[i] = Map[a[i]];
int l = , r = n;
while(l <= r)
{
int mid = (l + r) >> ;
if(Check(mid)) ans = mid, l = mid + ;
else r = mid - ;
}
printf("%lld\n", ans);
return ;
}

【题解】51nod 1686第K大区间的更多相关文章

  1. 51nod 1686 第k大区间

    1686 第K大区间 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. ...

  2. 51nod 1686 第K大区间2

    1685 第K大区间2 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. 众数(统计学/数学名词)_百度百科 Input 第一行两个数n和k(1<=n ...

  3. 51NOD 1686 第K大区间 二分

    第k大区间   定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. Input   第一行两个数n和k(1<=n<=100000,k<=n* ...

  4. 51nod 1686 第K大区间【离散化+二分】

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 题意: 定义一个区间的值为其众数出现的次数. 现给出n ...

  5. 51Nod 1686 第K大区间(离散化+尺取法)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 题意: 思路: 第K大值,所以可以考虑二分法,然后用尺取法去扫描, ...

  6. 51nod 1686 第K大区间 二分瞎搞

    题目: 定义一个区间的值为其众数出现的次数. 现给出n个数,求将所有区间的值排序后,第K大的值为多少. 题解: 答案明显单调,我们考虑二分答案. 转化为判定问题后我们需要观察到一个性质: 如果一个区间 ...

  7. 1686 第K大区间(尺取+二分)

    1686 第K大区间 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. ...

  8. 1686 第K大区间

    1686 第K大区间 时间限制:1 秒 空间限制:131072 KB   定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. 众数(统计学/数学名词)_百度百 ...

  9. 51Nod——T 1686 第K大区间

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 ...

随机推荐

  1. 封装一个Automapper单例

    public class DataModule : IModule { public void Configure(IMapperConfigurationExpression cfg) { //cf ...

  2. android学习十二 配置变化

    1.配置变化会终止当前活动,并重建活动 2.配置变化有    2.1  屏幕方向变化    2.2  语言变化    2.3   插到基座等   3. 配置变化应用程序不会清除,上下文对新活动依然有效 ...

  3. iOS 测试工具reveal可视化调试工具的使用

    简单翻译一下reveal可视化图形工具插入项目的官方文档(官方英文版file:///Applications/Reveal.app/Contents/SharedSupport/Documentati ...

  4. javaweb(九)—— 通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  5. WebDriver--定位元素的8种方式

    在UI层面的自动化测试开发中,元素的定位与操作是基础,也是经常遇到的困难所在.webdriver提供了8种定位: 1. id定位:find_element_by_id("id值") ...

  6. OSG-粒子系统和初步

    本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...

  7. Qt-第一个QML程序-2-关键代码分析,TEXT,Image,Mouseare

    qml语言开始写的时候有点不习惯,后面用的多了感觉很好,很顺手,用于快速搭建项目界面,真的很好. 目前用到的还是比较简单的 隐藏标题栏,而依附任务栏 flags: Qt.Window | Qt.Fra ...

  8. ReadyAPI 教程和示例(二)

    声明:如果你想转载,请标明本篇博客的链接,请多多尊重原创,谢谢! 本篇使用的 ReadyAPI版本是2.5.0 接上一篇: 4.修改SoapUI测试 本节将演示如何为测试用例添加测试步骤以及更改请求参 ...

  9. MySQL☞abs函数

    abs( )函数:求出绝对值 格式: select  abs(数值)  from 表名 如下图:

  10. mysql面试常见题目3

    三十六大 冯唐 春水初生, 春林初盛, 春风十里,不如你. 秋风落叶, 秋雨绵绵, 愁心上秋,只为你. 某个员工信息表结构和数据如下: id name dept salary edlevel hire ...