hdu 2665 Kth number (poj 2104 K-th Number) 划分树
划分树的基本功能是,对一个给定的数组,求区间[l,r]内的第k大(小)数。
划分树的基本思想是分治,每次查询复杂度为O(log(n)),n是数组规模。
具体原理见http://baike.baidu.com/link?url=vIUKtsKYx7byeS2KCOHUI14bt_0sdHAa9BA1VceHdGsTv5jVq36SfZgBKdaHYUGqIGvIGrE_aJtqy0D0b1fCoq
个人感觉看代码是最好的学习方法。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100100 int a[N];
int s[][N];//划分树
int num[][N];//num[i][j] - num[i][j-1] == 1表示第i层第j个数在下层中要被划入左子树 void build(int l, int r, int dep = )
{
if(l == r){
s[dep][l] = s[dep-][l];
return;
}
int mid = l+r>>;
int cnt = mid-l+;
for(int i = l; i <= r; i++) if(s[dep-][i] < a[mid]) cnt--;
int c1 = l, c2 = mid+;
for(int i = l; i <= r; i++)
{
if(s[dep-][i] < a[mid] || ( s[dep-][i] == a[mid] && cnt-- > )) s[dep][c1++] = s[dep-][i];
else s[dep][c2++] = s[dep-][i]; num[dep-][i] = num[dep-][l-]+c1-l;
}
build(l, mid, dep+);
build(mid+, r, dep+);
} int query(int l, int r, int k, int L, int R, int dep = )
{
if(l == r) return s[dep][l];
int mid = L+R>>;
int cnt = num[dep][r] - num[dep][l-]; if(cnt >= k)
{
int nl = L+num[dep][l-]-num[dep][L-];
int nr = nl+cnt-;
return query(nl, nr, k, L, mid, dep+);
}
else
{
int nr = r+num[dep][R]-num[dep][r];
int nl = nr - (r-l-cnt);
return query(nl, nr, k-cnt, mid+, R, dep+);
}
} int main()
{
int T, n, m;
scanf("%d", &T);
while(T--)
//while(~scanf("%d %d", &n, &m))
{
memset(num, , sizeof(num));
scanf("%d %d", &n, &m);
for(int i = ; i <= n; i++) scanf("%d", &a[i]);
for(int i = ; i <= n; i++) s[][i] = a[i];
sort(a+, a+n+);
build(, n);
for(int i = ; i < m; i++)
{
int l, r, k;
scanf("%d %d %d", &l, &r, &k);
printf("%d\n", query(l, r, k, , n));
} }
return ;
}
hdu 2665 Kth number (poj 2104 K-th Number) 划分树的更多相关文章
- HDU 2665(Kth number-区间第k大[内存限制+重数])
Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- hdu 2665 Kth number
划分树 /* HDU 2665 Kth number 划分树 */ #include<stdio.h> #include<iostream> #include<strin ...
- 主席树[可持久化线段树](hdu 2665 Kth number、SP 10628 Count on a tree、ZOJ 2112 Dynamic Rankings、codeforces 813E Army Creation、codeforces960F:Pathwalks )
在今天三黑(恶意评分刷上去的那种)两紫的智推中,突然出现了P3834 [模板]可持久化线段树 1(主席树)就突然有了不详的预感2333 果然...然后我gg了!被大佬虐了! hdu 2665 Kth ...
- K-th Number POJ - 2104
K-th Number POJ - 2104 You are working for Macrohard company in data structures department. After fa ...
- K-th Number Poj - 2104 主席树
K-th Number Poj - 2104 主席树 题意 给你n数字,然后有m次询问,询问一段区间内的第k小的数. 解题思路 这个题是限时训练做的题,我不会,看到这个题我开始是拒绝的,虽然题意清晰简 ...
- 主席树 【权值线段树】 && 例题K-th Number POJ - 2104
一.主席树与权值线段树区别 主席树是由许多权值线段树构成,单独的权值线段树只能解决寻找整个区间第k大/小值问题(什么叫整个区间,比如你对区间[1,8]建立一颗对应权值线段树,那么你不能询问区间[2,5 ...
- 静态区间第k大(划分树)
POJ 2104为例[经典划分树问题] 思想: 利用快速排序思想, 建树时将区间内的值与区间中值相比,小于则放入左子树,大于则放入右子树,如果相等则放入左子树直到放满区间一半. 查询时,在建树过程中利 ...
- [NBUT 1458 Teemo]区间第k大问题,划分树
裸的区间第k大问题,划分树搞起. #pragma comment(linker, "/STACK:10240000") #include <map> #include ...
- POJ 2104&HDU 2665 Kth number(主席树入门+离散化)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 50247 Accepted: 17101 Ca ...
随机推荐
- 【HDOJ6621】K-th Closest Distance(主席树,二分)
题意:给定一个长为n的序列,有m次强制在线的询问,每次询问位置[L,R]中abs(a[i]-p)第k小的值 n,m<=1e5,a[i]<=1e6,p<=1e6,k<=169 思 ...
- 图论 List
题目 #A 小 K 的农场 (Unaccepted) #B 信息传递 (Unaccepted) #C 最短路计数 (Accepted) #D 通往奥格瑞玛的道路 (Accepted) ...
- MainActivity.java 文件
主函数 package myapplication21.lum.com.mycanvas; import android.support.v7.app.AppCompatActivity;import ...
- scrapy抓取企业名录
我们要用scrapy抓取企业名录网站的企业信息,并且保存在mysql数据库中,数据大概是22万条,我们用scrapy抓取. 第一步,现在item中定义好要抓取的字段 import scrapy cla ...
- DVBS/S2功能
- js对url的编码和解码
最近做公众号相关, 需要在公众号里面配菜单, 才发现菜单的链接部分是编码过的, 如这样http%3A%2F%2Fw3cschool.cn%2Fmy%20test.asp%3Fname%3Dst%C3% ...
- day38—JavaScript的运动基础-匀速运动
转行学开发,代码100天——2018-04-23 一.运动基础框架 JavaScript的运动可以广义理解为渐变效果,直接移动效果等,图网页上常见的“分享到”,banner,透明度变化等.其实现的基本 ...
- spring4.1.8扩展实战之五:改变bean的定义(BeanFactoryPostProcessor接口)
本章我们继续实战spring的扩展能力,通过自定义BeanFactoryPostProcessor接口的实现类,来对bean实例做一些控制: 原文地址:https://blog.csdn.net/bo ...
- curl 中关于 CURLINFO_HEADER_SIZE 的 BUG 定位及修复
curl 官方下载页面 CentOS7 默认安装的 curl 版本太低了,需要升级为最新版. 1. 问题描述 对接了一个接口,用来下载 PDF 文件.使用 curl 下载后,文件老是报错无法打开.接口 ...
- Vue Cli 3:vue.config.js配置文件
Vue Cli 3生成的项目结构,没有build.config目录,而是使用vue.config.js来进行配置. vue.config.js 是一个可选的配置文件,如果项目的 (和 package. ...