二分答案+++++++(。・ω・。) 感觉这个思路好像挺常用的:求第\(K\) 大 --> 二分第 \(K\) 大的值 --> 检验当前二分的值排名是第几。前提:排名与数值大小成单调性变化。于是对于这题我们也不例外,二分一下最后中位数的值是多少,把数组中的值 \(> K\) 的变成 \(1\),\(< K\) 的变成 \(-1\), \(= K\) 的为 \(0\)。那么,一个中位数为 \(K\) 的区间区间和为 \(0\), 一个中位数\(< K\) 的区间和 \(< 0\), \(> K\) 则 \(> 0\)。

  于是求区间中位数 \(> K\) 和 \(=K\) 的区间就转化为了求满足条件的区间值的区间。这个只需要用树状数组维护一下就好啦。由于有奇数的规定,我们开两个树状数组分别代表偶数下标和奇数下标,以保证求得的区间长度为奇数。以及因为有负数,所以将数组整体向后平移即可。

#include<bits/stdc++.h>
using namespace std;
#define maxn 350000
#define INF INT_MAX
#define lowbit(i) (i & (-i))
int n, K, ans, a[maxn], A[maxn], sum[maxn];
int C[][maxn], b[maxn], D = 1e5; 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 Update(int x, int opt)
{
for(int i = x; i < maxn; i += lowbit(i))
C[opt][i] += ;
} int Query(int x, int opt)
{
int ret = ;
for(int i = x; i; i -= lowbit(i))
ret += C[opt][i];
return ret;
} int Check(int mid)
{
memset(C, , sizeof(C));
int ans1 = , ans2 = ; Update(D, );
for(int i = ; i <= n; i ++)
{
if(a[i] < mid) A[i] = -;
else if(a[i] > mid) A[i] = ;
else A[i] = ;
sum[i] = sum[i - ] + A[i];
Update(sum[i] + D, i % );
ans1 += Query(sum[i] + D, (i % ) ^ ) - Query(sum[i] + D - , (i % ) ^ );
ans2 += Query(sum[i] + D - , (i % ) ^ );
}
if(K > ans1 + ans2) return ;
else if(K < ans2) return ;
else return ;
} int main()
{
n = read(), K = read();
for(int i = ; i <= n; i ++) a[i] = b[i] = read();
sort(b + , b + + n);
int l = , r = n;
while(l <= r)
{
int mid = (l + r) >> ;
int k = Check(b[mid]);
if(k == ) r = mid - ;
else if(k == ) l = mid + ;
else { ans = b[mid]; break; }
}
printf("%d\n", ans);
return ;
}

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

  1. ACM学习历程—51NOD 1685 第K大区间2(二分 && 树状数组 && 中位数)

    http://www.51nod.com/contest/problem.html#!problemId=1685 这是这次BSG白山极客挑战赛的E题. 这题可以二分答案t. 关键在于,对于一个t,如 ...

  2. 51nod 1685 第K大区间2

    定义一个长度为奇数的区间的值为其所包含的的元素的中位数.中位数_百度百科 现给出n个数,求将所有长度为奇数的区间的值排序后,第K大的值为多少. 样例解释: [l,r]表示区间的值[1]:3[2]:1[ ...

  3. 51nod 1686 第K大区间2

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

  4. 51nod 1686 第k大区间

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

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

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

  6. 【题解】51nod 1686第K大区间

    成功的秘诀,在于克服自己看题解的冲动……[笑哭].自己A掉这题还是灰常开心的~ 以及爱死 two - pointer ! two - pointer 大法是真的好哇……这个题目有上一题的经验:求第\( ...

  7. 51 NOD 1685 第K大区间2 二分+BIT

    题目描述: 定义一个长度为奇数的区间的值为其所包含的的元素的中位数. 现给出n个数,求将所有长度为奇数的区间的值排序后,第K大的值为多少. 样例解释: [l,r]表示区间的值 [1]:3 [2]:1 ...

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

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

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

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

随机推荐

  1. LeetCode:35. Search Insert Position(Easy)

    1. 原题链接 https://leetcode.com/problems/search-insert-position/description/ 2. 题目要求 给定一个已经排好序的数组和一个目标值 ...

  2. linux-flock文件锁之实际运用

    vi test.sh #! /bin/bash echo "Hello World" touch test.lock #随便命名 [root@localhost ~]# flock ...

  3. Linux命令应用大词典-第25章 备份与还原

    25.1 mkisofs:创建ISO9660/Joliet/hfs文件系统

  4. Unity编辑器 - 编辑器控制特效播放

    编辑器控制特效播放 Unity的动画编辑器不能预览粒子系统的播放,为了方便预览特效,设想制作一个预览特效的工具,通常一个特效有三种组件: - Animation - Animator - Partic ...

  5. 利用爬虫、SMTP和树莓派3B发送邮件(爬取墨迹天气预报信息)

    -----------------------------------------学无止境----------------------------------------- 前言:大家好,欢迎来到誉雪 ...

  6. "Generative Adversarial Nets" Notes

    - Ian J.Goodfellow 中文翻译:https://blog.csdn.net/wspba/article/details/54577236 代码实现:https://github.com ...

  7. OpenPAI大规模人工智能平台安装部署文档

    环境要求: 如果需要图形界面,需要在Ubuntu系统安装,否则centos系统安装时是没有问题的(web端和命令行进行任务提交) 安装过程需要有另外一台控制端机器(注意:区别于集群所在的任何一台服务器 ...

  8. 一:yarn 介绍

        yarn的了出现主要是为了拆分jobtracker的两个核心功能:资源管理和任务监控,分别对应resouceManager(RM)和applicationManager(AM).yarn中的任 ...

  9. net::ERR_ABORTED ,引入js文件出现报错的解决方法

    在head头里面添加 <mvc:annotation-driven enable-matrix-variables="true"></mvc:annotation ...

  10. 我的Vscode配置

    "editor.fontSize": 17,//字体大小 "editor.wordWrap": "on",//软换行 "files ...