POJ 2104 K-th Number(划分树)
参考HH大神的模版。对其中一些转移,还没想清楚,大体明白上是怎么回事了,划分树就是类似快排,但有点点区别的。多做几个题,慢慢理解。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define N 100100
struct node
{
int l,r;
}tree[*N];
int sorted[N];
int lnum[][N];
int val[][N]; void build(int d,int l,int r,int rt)
{
int m,lsame,i,lpos,rpos,same;
tree[rt].l = l;
tree[rt].r = r;
if(l == r) return ;
m = (l+r)>>;
lsame = (m - l + );
for(i = l;i <= r;i ++)
{
if(val[d][i] < sorted[m])
lsame --;
}
lpos = l;
rpos = m+;
same = ;
for(i = l;i <= r;i ++)
{
if(i == l)//lnum[d][i]表示[tree[rt].l, i ]区域里有多少个数分到左边
lnum[d][i] = ;
else
lnum[d][i] = lnum[d][i-];
if(val[d][i] < sorted[m])
{
lnum[d][i] ++;
val[d+][lpos++] = val[d][i];
}
else if(val[d][i] > sorted[m])
{
val[d+][rpos++] = val[d][i];
}
else
{
if(same < lsame)
{
same ++;
lnum[d][i] ++;
val[d+][lpos++] = val[d][i];
}
else
{
val[d+][rpos++] = val[d][i];
}
}
}
build(d+,lson);
build(d+,rson);
}
int query(int d,int k,int l,int r,int rt)
{
int s,ss,nl,nr,m,rs,rss;//s表示[ l , r ]有多少个分到左边
if(l == r)//ss表示 [tree[idx].left , l-1 ]有多少个分到左边
{
return val[d][l];
}
if(l == tree[rt].l)
{
s = lnum[d][r];
ss = ;
}
else
{
s = lnum[d][r] - lnum[d][l-];
ss = lnum[d][l-];
}
if(s >= k)
{
nl = ss + tree[rt].l;
nr = ss + tree[rt].l + s - ;
return query(d+,k,nl,nr,rt<<);
}
else
{
m = (tree[rt].l + tree[rt].r)>>;
rss = l - tree[rt].l - ss;
rs = r - l + - s;
nl = m + rss + ;
nr = m + rs + rss;
return query(d+,k-s,nl,nr,rt<<|);
}
}
int main()
{
int i,n,m,x,y,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i = ;i <= n;i ++)
{
scanf("%d",&val[][i]);
sorted[i] = val[][i];
}
sort(sorted+,sorted+n+);
build(,,n,);
for(i = ;i < m;i ++)
{
scanf("%d%d%d",&x,&y,&k);
printf("%d\n",query(,k,x,y,));
}
}
return ;
}
POJ 2104 K-th Number(划分树)的更多相关文章
- 【POJ 2104】 K-th Number 主席树模板题
达神主席树讲解传送门:http://blog.csdn.net/dad3zz/article/details/50638026 2016-02-23:真的是模板题诶,主席树模板水过.今天新校网不好,没 ...
- poj 2104 K-th Number 划分树,主席树讲解
K-th Number Input The first line of the input file contains n --- the size of the array, and m --- t ...
- 静态区间第k大(划分树)
POJ 2104为例[经典划分树问题] 思想: 利用快速排序思想, 建树时将区间内的值与区间中值相比,小于则放入左子树,大于则放入右子树,如果相等则放入左子树直到放满区间一半. 查询时,在建树过程中利 ...
- [NBUT 1458 Teemo]区间第k大问题,划分树
裸的区间第k大问题,划分树搞起. #pragma comment(linker, "/STACK:10240000") #include <map> #include ...
- poj 2104 K-th Number (划分树入门 或者 主席树入门)
题意:给n个数,m次询问,每次询问L到R中第k小的数是哪个 算法1:划分树 #include<cstdio> #include<cstring> #include<alg ...
- hdu 2665 Kth number (poj 2104 K-th Number) 划分树
划分树的基本功能是,对一个给定的数组,求区间[l,r]内的第k大(小)数. 划分树的基本思想是分治,每次查询复杂度为O(log(n)),n是数组规模. 具体原理见http://baike.baidu. ...
- [hdu2665]Kth number(划分树求区间第k大)
解题关键:划分树模板题. #include<cstdio> #include<cstring> #include<algorithm> #include<cs ...
- hdu 2665 Kth number(划分树模板)
http://acm.hdu.edu.cn/showproblem.php?pid=2665 [ poj 2104 2761 ] 改变一下输入就可以过 http://poj.org/problem? ...
- HDU 2665 Kth number(划分树)
Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
随机推荐
- CPU tick counter
#define rdtscll(val) \ __asm__ __volatile__ ("rdtsc" : "=A" (val)) example #incl ...
- 海量数据导入MySQL的注意事项
对于千万行级别的数据,处理起来非常麻烦,例如有一个文件a.txt,大小超过2GB,共2000多万行,每行是一个新闻的相关信息,其中有一列为新闻标题,字符串型,新闻标题较长,现需要对新闻标题进行聚类,将 ...
- Android中自定义Activity和Dialog的位置大小背景和透明度等demo
1.自定义Activity显示样式 先在res/values下建colors.xml文件,写入: <?xml version="1.0" encoding="utf ...
- Selenium测试Ajax程序(转)
上周末参加了Qclub的百度技术沙龙,听了百度的孙景卫讲了Web自动化测试,讲的非常好,然后在小组讨论时又有幸座在了一起.我们讨论的一个内容,就是Ajax应用程序比原来的非Ajax程序更不易测试,这里 ...
- canva实践小实例 —— 马赛克效果
前面给大家带来了操作像素的API,此时此刻,我觉得应该配以小实例来进行进一步的说明和演示,以便给大家带来更宽广的视野和灵感,你们看了我的那么多的文章,应该是懂我的风格,废话不多说,进入正题: 这次给大 ...
- oracle的数据库,随笔
不多说,看代码 select b.*,a.kscj,a.paiming from (select t.kch,t.kcm,t.kscj,t.xh, rank() over (order ...
- 修改PHP网站默认首页
一般默认的首页文件是index.php index.php3 index.html index.htm之类的,要想修改为myNewIndex.php, 进入服务器Apache目录,找到httpd.co ...
- js 带省略号的分页源码及应用实例
一.js:pagination.js /*--说明分页div id为:changpage*/var eachPageDataNum = 10;//每页显示记录数var nowPage = 1;//当前 ...
- Lucene实践
Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能. OK,大家都知道这个是一个搜索检索工具,那究竟是怎么做检索的,其实道理是 ...
- DbHelper-SQL数据库访问助手
using System; using System.Data; using System.Data.SqlClient; namespace Whir.Software.Framework.Ulti ...