主席树,就是n个线段树,用nlonn的空间实现

首先建立第一个线段树

把要查询的值离散化,建立值的线段树

每一次加入一个点

显然每一次只会修改logn个点

把其他的点直接建边连接即可

代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=;
int rt[N],a[N],n,m,b[N],x,cnt=,now,y,k;
struct Tree
{
int num,l,r,ls,rs;
}T[*N];
int ef(int x)
{
int l=,r=cnt;
while (l<r)
{
int mid=(l+r)/;
if (b[mid]<x)l=mid+;
else r=mid;
}
return l;
}
int build(int l,int r)
{
now++;
if (l==r)
{
T[now].l=l;
T[now].r=r;
return now;
}
int k=now;
T[k].l=l;T[k].r=r;
int mid=(l+r)/;
if (l<=mid)T[k].ls=build(l,mid);
if (mid<r)T[k].rs=build(mid+,r);
return k;
}
int insert(int x,int l,int r,int s)
{
now++;
if (l==r)
{
T[now].l=l;
T[now].r=r;
T[now].num=T[x].num+;
return now;
}
int k=now,mid=(l+r)/;
T[k].l=l;T[k].r=r;
if (s<=mid)
{
T[k].ls=insert(T[x].ls,l,mid,s);
T[k].rs=T[x].rs;
}
else
{
T[k].ls=T[x].ls;
T[k].rs=insert(T[x].rs,mid+,r,s);
}
T[k].num=T[T[k].ls].num+T[T[k].rs].num;
return k;
}
int find(int x,int y,int z)
{
if (T[x].l==T[x].r)return T[x].l;
if (T[T[x].ls].num-T[T[y].ls].num>=z)return find(T[x].ls,T[y].ls,z);
else return find(T[x].rs,T[y].rs,z-T[T[x].ls].num+T[T[y].ls].num);
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)scanf("%d",&a[i]);
for (int i=;i<=n;i++)b[i]=a[i];
sort(b+,b+n+);
for (int i=;i<=n;i++)
if (b[i]!=b[i-])
b[++cnt]=b[i];
rt[]=;build(,n);
for (int i=;i<=n;i++)rt[i]=now+,insert(rt[i-],,n,ef(a[i]));
while (m--)
{
scanf("%d%d%d",&x,&y,&k);
swap(x,y);
printf("%d\n",b[find(rt[x],rt[y-],k)]);
}
return ;
}

主席树模板(poj 2104&&poj2761)的更多相关文章

  1. 主席树模板poj 2104

    资料1:http://blog.csdn.net/regina8023/article/details/41910615 资料2:模板来源:http://www.cnblogs.com/lidaxin ...

  2. 【POJ 2104】 K-th Number 主席树模板题

    达神主席树讲解传送门:http://blog.csdn.net/dad3zz/article/details/50638026 2016-02-23:真的是模板题诶,主席树模板水过.今天新校网不好,没 ...

  3. 主席树:POJ2104 K-th Number (主席树模板题)

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

  4. luogup3834(主席树模板)

    luogup3834(主席树模板) 给定由N个正整数构成的序列,将对于指定的闭区间查询m次其区间内第k小值.1≤N,M≤2e5. 有一个做法,是对于每个序列的前缀建一颗权值线段树,然后通过权值线段树相 ...

  5. 【Luogu】P3384主席树模板(主席树查询K小数)

    YEAH!我也是一个AC主席树模板的人了! 其实是个半吊子 我将尽量详细的讲出我的想法. 主席树太难,我们先搞普通线段树好了 普通线段树怎么做?我的想法是查询K次最小值,每次查完把查的数改成INF,查 ...

  6. SPOJ MKTHNUM & POJ 2104 - K-th Number - [主席树模板题]

    题目链接:http://poj.org/problem?id=2104 Description You are working for Macrohard company in data struct ...

  7. POJ 2104 K-th Number(主席树模板题)

    http://poj.org/problem?id=2104 题意:求区间$[l,r]$的第k小. 思路:主席树不好理解啊,简单叙述一下吧. 主席树就是由多棵线段树组成的,对于数组$a[1,2...n ...

  8. 【BZOJ 1901】【Zju 2112】 Dynamic Rankings 动态K值 树状数组套主席树模板题

    达神题解传送门:http://blog.csdn.net/dad3zz/article/details/50638360 说一下我对这个模板的理解: 看到这个方法很容易不知所措,因为动态K值需要套树状 ...

  9. poj2104 主席树模板题

    题意 给出n个数字组成的数字序列,有m组询问.每次询问包含三个数字l,r,k.对于每个询问输出序列区间[l,r]中第k大的数字. 分析 这是主席树的模板题,套板子就可以 #include <cs ...

随机推荐

  1. React 回忆录(三)使用 React 渲染界面

    Hi 各位,欢迎来到 React 回忆录!

  2. bootstrap的carousel图片轮播

    整个轮播是放在一个div .carousel和.slide的div中的, 包括3个部分: 1. 第一个部分indicator位于下方的指示器部分. 结构是一个ol和li, ol的类是carousel- ...

  3. js文字转移效果

    这个例子算是有点样子的. 思路: 字符串操作.左框里面先是预设的.点击按钮时截取左框中的字符串的前一个字符到右框里的字符串后面,以此循环.点击按钮时按钮变为灰色,在循环完成后恢复.计数的总数(右边)是 ...

  4. BZOJ 1001: [BeiJing2006]狼抓兔子(s-t平面图+最短路求最小割)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 题意: 思路:这道题目是最小割题目,但是吧你直接套用Dinic是会超时的. 这里有种很奇妙的做 ...

  5. 用 Excel 生成和管理 Markdown 表格--转载

    Markdown 作为一种轻量级的标记语言,用来进行简单的文本排版,确实方便快捷.但 Markdown 标记语言的属性,也使得其在表格处理上略显繁琐且不直观.而 Excel 几乎就是表格的代名词,借助 ...

  6. plsql过期解决方法

    1.首先,登陆PL/SQL Developer,PL/SQL Developer要到期了 2.输入指令“regedit”打开注册表,如图所示 3.然后,在注册表里按HKEY_CURRENT_USER\ ...

  7. Python操作Rabbit MQ的5种模式

    python版本:   2.7.14 一 消息生产者代码: # -*- coding: utf-8 -*- import json import pika import urllib import u ...

  8. java ShutdownHook介绍与使用

    Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的方案. JDK提供了Java ...

  9. Ubuntu14.04 terminal添加右键

    设置Ubuntu 14.04右键终端的方法如下: 首先要安装一个包,即可在右键里面添加一个“打开终端”的菜单. sudo apt-get install nautilus-open-terminal ...

  10. Ubuntu 定时任务

        一.cron相关命令 #重载cron sudo service cron reload   #查看cron状态 service cron status   #查看cron pid pidof ...