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

http://www.51nod.com/contest/problem.html#!problemId=1685

这是这次BSG白山极客挑战赛E题。

这题可以二分答案t

关键在于,对于一个t,如何判断它是否能成为第k大。

将序列中大于t的置为1,小于t的置为-1,等于t的置为0。那么区间中位数大于t的和就大于0,小于t的就小于0。于是就是判断区间和大于0的个数是否小于等于k

维护前缀和sum(i),然后统计之前sum(j)小于sum(i)的有多少个,就是以i为右值的区间和大于0的个数。于是就可以用树状数组维护了。

由于是奇数长度区间,所以树状数组需要维护奇偶长度的前缀和个数。需要特判sum(i) > 0的情况。

 

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <vector>
#include <string>
#define LL long longusing namespace std;//线段树
//区间每点增值,求区间和
const int maxN = 100010;LL d[2][maxN*2];int lowbit(int x)
{return x&(-x);
}void add(int t, int id,int pls)
{while(id <= maxN<<1)//id最大是maxN
    {d[t][id] += pls;id += lowbit(id);}
}LL sum(int t, int to)
{LL s = 0;while(to > 0){s = s + d[t][to];to -= lowbit(to);}return s;
}LL query(int t, int from, int to)
{return sum(t, to) - sum(t, from-1);
}int n, a[maxN], b[maxN];
LL k;LL judge(int t)
{for (int i = 0; i < n; ++i){if (a[i] > t) b[i] = 1;else if (a[i] == t) b[i] = 0;else b[i] = -1;}memset(d, 0, sizeof(d));int sum = 0;LL ans = 0;for (int i = 0; i < n; ++i){sum += b[i];ans += query(!(i%2), 100005-n, 100005+sum-1);if (i%2 == 0 && sum > 0) ans++;add(i%2, 100005+sum, 1);}return ans;
}void work()
{int lt, rt, mid;lt = rt = a[0];for (int i = 1; i < n; ++i){lt = min(lt, a[i]);rt = max(rt, a[i]);}while ((LL)lt+1 < rt){mid = ((LL)lt+rt)>>1;if (judge(mid) > k-1) lt = mid;else rt = mid;}if (judge(lt) <= k-1) printf("%d\n", lt);else printf("%d\n", rt);
}int main()
{//freopen("test.in", "r", stdin);while (scanf("%d", &n) != EOF){cin >> k;for (int i = 0; i < n; ++i) scanf("%d", &a[i]);work();}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/andyqsmart/p/5523820.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue项目请求封装;axios封装使用

vue项目&#xff0c;封装axios请求方式和响应状态码&#xff1b;以及接口的api封装&#xff1b; 目录结构&#xff1a; 1.具体在src/utils/request.js下封装axios&#xff1a; ①引入axios和router ②引入element-ui是为了用提示组件 和加载组件&#xff08;可选择去掉&#…

【Bash】实现指定目录下的文件编码转换,以原文件名保存

文件名: encodeExchange.sh Linux版本&#xff1a; #!/bin/bashfEncodeUTF-8 tEncodeGBK#fEncodeGBK #tEncodeUTF-8files"Classes/*"# convert files encoding from GBK->UTF-8 or UTF-8->GBK convertFileEncode() {if [ $# -lt 3 ]; thenecho "Usage: …

linux下恢复误删文件

linux下文件实际上是一个指向inode的链接, inode链接包含了文件的所有属性, 比如权限和所有者, 数据块地址(文件存储在磁盘的这些数据块中). 当你删除(rm)一个文件, 实际删除了指向inode的链接, 并没有删除inode的内容. 进程可能还在使用. 只有当inode的所有链接完全移去, 然后…

mysql中的boolean tinyint

由于mysql 里没boolean&#xff1b;tinyint为 数据类型 &#xff0c;so 当存入true时&#xff0c;自动转换成1 ;

顺序查找(Sequential Search)

1、定义 顺序查找又叫线性查找&#xff0c;是最基本的查找技术。 2、基本思想 从表的一端开始&#xff08;第一个或最后一个记录&#xff09;&#xff0c;顺序扫描线性表&#xff0c;依次将扫描到的结点关键宇和给定值K相比较。若当前扫描到的结点关键字与K相等&#xff0c;则查…

简单的封装axios 不包含状态码和提示

复杂封装&#xff0c;包含提示和状态码的&#xff0c;点击这里查看 以下是简单封装axios的request.js文件&#xff1a; import axios from axios import router from ./../router import { Message } from element-ui// 设置axios全局默认的BASE-URL&#xff0c; 只要设置了全…

精确记录和恢复ListView滑动位置

工作中遇到一个需求&#xff0c;对ListView某一项操作后刷新ListView&#xff0c;但是如果直接刷新&#xff0c;界面上ListView从第一列开始显示&#xff0c;用户体验不好&#xff0c;于是在网上搜了一些恢复LIstView滑动位置的方法。解决办法如下&#xff1a; //给ListView设置…

时间戳倒计时

var defaultTimeStamp Math.floor(Date.now()/1000);var dayA defaultTimeStamp % (24 * 3600) //除去天数&#xff0c;得到剩余的小时时间戳var hourA dayA % (3600) //除去小时&#xff0c;得到剩余的分钟数时间戳var minuteA hourA % (60) …

python中使用sys模板和logging模块获取行号和函数名的方法

From: http://www.jb51.net/article/49026.htm 这篇文章主要介绍了python中使用sys模板和logging模块获取行号和函数名的方法,需要的朋友可以参考下对于python&#xff0c;这几天一直有两个问题在困扰我: 1.python中没办法直接取得当前的行号和函数名。这是有人在论坛里提出的问…

第二阶段冲刺(五)

昨天云服务 今天云服务 遇到的问题 转载于:https://www.cnblogs.com/qianxia/p/5525095.html

axios的content-type是自动设置的吗?

是根据提交的数据根式自动设置的 三种常见post提交和方式 axios中使用qs

MyBatis MapperScannerConfigurer配置——MyBatis学习笔记之八

在上一篇博文的示例中&#xff0c;我们在beans.xml中配置了studentMapper和teacherMapper&#xff0c;供我们需要时使用。但如果需要用到的映射器较多的话&#xff0c;采用这种配置方式就显得很低效。为了解决这个问题&#xff0c;我们可以使用MapperScannerConfigurer&#xf…

本地ip出口查询

获取/查看本机出口ip curl http://members.3322.org/dyndns/getip

使用Python获取Linux系统的各种信息

From: http://www.jb51.net/article/52058.htm 这篇文章主要介绍了使用Python获取Linux系统的各种信息,例如系统类型、CPU信息、内存信息、块设备等,需要的朋友可以参考下在本文中&#xff0c;我们将会探索使用Python编程语言工具来检索Linux系统各种信息。走你。 哪个Python版…

本地如何搭建IPv6环境测试你的APP

IPv6的简介 IPv4 和 IPv6的区别就是 IP 地址前者是 .&#xff08;dot&#xff09;分割&#xff0c;后者是以 :&#xff08;冒号&#xff09;分割的&#xff08;更多详细信息自行搜索&#xff09;。 PS&#xff1a;在使用 IPv6 的热点时候&#xff0c;记得手机开 飞行模式 哦&am…

HDU 2376 Average distance

HDU_2376 对于任意一棵子树来讲&#xff0c;以根节点为深度最浅的点的路径一共有两类&#xff0c;一类是以根节点为端点的路径&#xff0c;另一类是过根节点但端点分别在两棵子树中的路径。然后将无根树转化为有根树后dfs时计算出上面两类路径的长度即可。 #include<stdio.h…

meta http-equiv属性兼容浏览器_定时刷新

<meta http-equiv"X-UA-Compatible" content"IEedge"> #以上代码告诉IE浏览器&#xff0c;IE8/9及以后的版本都会以最高版本IE来渲染页面。 <meta http-equiv"refresh" content"30"> #每30秒钟刷新当前页面:

使用 Python 获取 Linux 系统信息的代码

From: http://www.jb51.net/article/52107.htm 在本文中&#xff0c;我们将会探索使用Python编程语言工具来检索Linux系统各种信息,需要的朋友可以参考下哪个Python版本? 当我提及Python&#xff0c;所指的就是CPython 2(准确的是2.7).我会显式提醒那些相同的代码在CPython 3 …

利用FPGA加速实现高性能计算

原文链接 原因&#xff1a;处理器本身无法满足高性能计算(HPC)应用软件的性能需求&#xff0c;导致需求和性能 之间出现了缺口。最初解决办法&#xff1a;使用协处理器来提升处理器的性能。协处理器&#xff08;基于硬件的设计&#xff09;具有三种能力&#xff1a;1.专门的硬件…

CSS实现半透明div层的方法

很不错的CSS透明效果&#xff0c;本实例是用CSS控制外层DIV不透明&#xff0c;而内层DIV透明&#xff0c;这样实现的效果是意想不到的&#xff0c;还不错吧&#xff0c;其实代码也是很简单的&#xff0c;也很好理解&#xff0c;主要是用了CSS的滤镜。 <html xmlns"http…