思路:裸的划分树

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#define Maxn 100010
#define lson(x) x<<1
#define rson(x) x<<1|1
using namespace std;
int n,m,val[][Maxn],toLeft[][Maxn],sorted[Maxn];
struct Tree{
int l,r;
int mid(){
return (l+r)>>;
}
}tree[Maxn*];
void BuildTree(int l,int r,int dep,int po)
{
tree[po].l=l,tree[po].r=r;
if(l==r)
return ;
int mid=tree[po].mid();
int lpos=l,rpos=mid+;
int same=mid-l+,i;
for(i=l;i<=r;i++){
if(val[dep][i]<sorted[mid])
same--;
}
for(i=l;i<=r;i++){
if(i==l) toLeft[dep][i]=;
else toLeft[dep][i]=toLeft[dep][i-];
if(val[dep][i]<sorted[mid]){
val[dep+][lpos++]=val[dep][i],toLeft[dep][i]++;
}
else
if(val[dep][i]>sorted[mid]){
val[dep+][rpos++]=val[dep][i];
}
else
if(same){
val[dep+][lpos++]=val[dep][i],toLeft[dep][i]++,same--;
}
else
val[dep+][rpos++]=val[dep][i];
}
BuildTree(l,mid,dep+,lson(po));
BuildTree(mid+,r,dep+,rson(po));
}
int query(int l,int r,int k,int dep,int po)
{
//cout<<tree[po].l<<" "<<tree[po].r<<endl;
if(l==r)
return val[dep][l];
int ls,lns;
if(l==tree[po].l){
ls=toLeft[dep][r];
lns=;
}else{
ls=toLeft[dep][r]-toLeft[dep][l-];
lns=toLeft[dep][l-];
}
int mid=tree[po].mid();
if(ls>=k){
int newl=tree[po].l+lns;
int newr=tree[po].l+lns+ls-;
return query(newl,newr,k,dep+,lson(po));
}
else{
int rns=l-tree[po].l-lns;
int rs=r-l+-ls;
int newl=mid++rns;
int newr=mid+rns+rs;
return query(newl,newr,k-ls,dep+,rson(po));
}
}
int main()
{
int i,j,a,b,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);
BuildTree(,n,,);
for(i=;i<m;i++){
scanf("%d%d%d",&a,&b,&k);
printf("%d\n",query(a,b,k,,));
}
}
return ;
}

poj 2104 划分树的更多相关文章

  1. K-th Number POJ - 2104 划分树

    K-th Number You are working for Macrohard company in data structures department. After failing your ...

  2. hdu 4417,poj 2104 划分树(模版)归并树(模版)

    这次是彻底把划分树搞明确了,与此同一时候发现了模版的重要性.敲代码一个字符都不能错啊~~~ 划分树具体解释:点击打开链接 题意:求一组数列中随意区间不大于h的个数. 这个题的做法是用二分查询  求给定 ...

  3. K-th Number Poj - 2104 主席树

    K-th Number Poj - 2104 主席树 题意 给你n数字,然后有m次询问,询问一段区间内的第k小的数. 解题思路 这个题是限时训练做的题,我不会,看到这个题我开始是拒绝的,虽然题意清晰简 ...

  4. [poj 2104]主席树+静态区间第k大

    题目链接:http://poj.org/problem?id=2104 主席树入门题目,主席树其实就是可持久化权值线段树,rt[i]维护了前i个数中第i大(小)的数出现次数的信息,通过查询两棵树的差即 ...

  5. poj 2104 主席树(区间第k大)

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 44940   Accepted: 14946 Ca ...

  6. POJ 2104 - 主席树 / 询问莫队+权值分块

    传送门 题目大意应该都清楚. 今天看到一篇博客用分块+莫对做了这道题,直接惊呆了. 首先常规地离散化后将询问分块,对于某一询问,将莫队指针移动到指定区间,移动的同时处理权值分块的数字出现次数(单独.整 ...

  7. POJ 2104 主席树模板题

    #include <iostream> #include <cstdio> #include <algorithm> int const maxn = 200010 ...

  8. POJ 2104 K-th Number(区间第k大数)(平方切割,归并树,划分树)

    题目链接: http://poj.org/problem? id=2104 解题思路: 由于查询的个数m非常大.朴素的求法无法在规定时间内求解. 因此应该选用合理的方式维护数据来做到高效地查询. 假设 ...

  9. [划分树] POJ 2104 K-th Number

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 51732   Accepted: 17722 Ca ...

随机推荐

  1. 【转】使用JavaScriptCore在JS和OC间通信

    http://www.cocoachina.com/ios/20160623/16796.html iOS 开发中,我们时不时的需要加载一些 Web 页面,一些需求使用 Web 页面来实现可以更可控, ...

  2. DelphiXE Android自适应屏幕办法

    相关资料: http://www.delphitop.com/html/FireMonkey/2658.html http://bbs.csdn.net/topics/390919460 1.Scal ...

  3. Spring AOP Example – Pointcut , Advisor

    In last Spring AOP advice examples, the entire methods of a class are intercepted automatically. But ...

  4. 系统级性能分析工具 — Perf

    从2.6.31内核开始,linux内核自带了一个性能分析工具perf,能够进行函数级与指令级的热点查找. perf Performance analysis tools for Linux. Perf ...

  5. log4j中的MDC和NDC

    NDC和MDC NDC(Nested Diagnostic Context)和MDC(Mapped Diagnostic Context)是log4j种非常有用的两个类,它们用于存储应用程序的上下文信 ...

  6. 语义Web和本体开发相关技术

    在技术实现方面,语义Web和本体理论的研究日趋成熟,已经有许多成熟的工具或程序接口,诸如Jena.OWL API等API是系统实现的关键技术.这里介绍系统的可行性分析以及系统开发设计的关键技术. 1 ...

  7. Web开源框架大汇总

    Struts 项目简介信息 Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的.由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的 ...

  8. C++成员变量、构造函数的初始化顺序

    一.C++成员变量初始化 1.普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行 2.static 静态变量(本地化数据和代码范围): st ...

  9. 用C#调用蓝牙编程

    2013-04-22 09:41:06 什么是蓝牙? 现在只能手机这么发达,蓝牙对我们来说肯定不陌生.我来介绍一下官方概念: 蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术.能在包括移动电 ...

  10. [1.1]Environment preset on a Windows server

    1. Python 3.5.1 (also on your personal computer) 2. Django 1.10.1 (also on your personal computer) 3 ...