题目背景

这是个非常经典的主席树入门题——静态区间第K小

数据已经过加强,请使用主席树。同时请注意常数优化

题目描述

如题,给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值。

输入输出格式

输入格式:

第一行包含两个正整数N、M,分别表示序列的长度和查询的个数。

第二行包含N个正整数,表示这个序列各项的数字。

接下来M行每行包含三个整数l,r,k l, r, kl,r,k , 表示查询区间[l,r][l, r][l,r]内的第k小值。

输出格式:

输出包含k行,每行1个正整数,依次表示每一次查询的结果

输入输出样例

输入样例#1:

5 5
25957 6405 15770 26287 26465
2 2 1
3 4 1
4 5 1
1 2 2
4 4 1
输出样例#1:

6405
15770
26287
25957
26287

说明

数据范围

对于20%的数据满足:1≤N,M≤10

对于50%的数据满足:1≤N,M≤1033​​

对于80%的数据满足:1≤N,M≤1055​​

对于100%的数据满足:1≤N,M≤2⋅1055​​

对于数列中的所有数aii​​,均满足−109≤ai≤109-{10}^9 \leq a_i \leq {10}^9−10​9​​≤a​i​​≤10​9​​

样例数据说明

N=5,数列长度为5,数列从第一项开始依次为25957,6405,15770,26287,26465

第一次查询为[2,2]区间内的第一小值,即为6405

第二次查询为[3,4]区间内的第一小值,即为15770

第三次查询为[4,5]区间内的第一小值,即为26287

第四次查询为[1,2]]区间内的第二小值,即为25957

第五次查询为[4,4]区间内的第一小值,即为26287

主席树真奇妙

给出两位巨佬的链接

第一个很详细的解释了主席树

第二个给出了此题的所有做法

http://www.cnblogs.com/zyf0163/p/4749042.html

http://www.cnblogs.com/NaVi-Awson/p/7325571.html

 #include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
struct Node
{
int key;
Node *ch[];
}S[N*],*pos=S;
Node *root[N+];
int a[N+],b[N+],n,m,sz,rem[N+];
void build(Node* &rt,int l,int r)
{
rt=++pos;
rt->key=;
if (l==r) return;
int mid=(l+r)/;
build(rt->ch[],l,mid);
build(rt->ch[],mid+,r);
}
void insert(Node* &rt,int l,int r,int k)
{
Node *x=rt;
rt=++pos;
rt->ch[]=x->ch[];
rt->ch[]=x->ch[];
rt->key=x->key+;
if (l==r) return;
int mid=(l+r)/;
if (k<=mid) insert(rt->ch[],l,mid,k);
else insert(rt->ch[],mid+,r,k);
}
int query(Node* rl,Node* rr,int l,int r,int k)
{
if (l==r) return l;
int mid=(l+r)/;
int x=rr->ch[]->key-rl->ch[]->key;
if (x>=k) return query(rl->ch[],rr->ch[],l,mid,k);
else return query(rl->ch[],rr->ch[],mid+,r,k-x);
}
int main()
{int i,j,x,y,k;
cin>>n>>m;
for (i=;i<=n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
sort(b+,b+n+);
sz=unique(b+,b+n+)-(b+);
for (i=;i<=n;i++)
a[i]=lower_bound(b+,b+sz+,a[i])-b;
build(root[],,n);
for (i=;i<=n;i++)
{
root[i]=root[i-];
insert(root[i],,n,a[i]);
}
while (m--)
{
scanf("%d%d%d",&x,&y,&k);
int ans=query(root[x-],root[y],,n,k);
printf("%d\n",b[ans]);
}
}

[POJ 2104]K-th Number【模板】(主席树)的更多相关文章

  1. POJ 2104:K-th Number(主席树静态区间k大)

    题目大意:对于一个序列,每次询问区间[l,r]的第k大树. 分析: 主席树模板题 program kthtree; type point=record l,r,s:longint; end; var ...

  2. poj 2104 K-th Number(主席树,详细有用)

    poj 2104 K-th Number(主席树) 主席树就是持久化的线段树,添加的时候,每更新了一个节点的线段树都被保存下来了. 查询区间[L,R]操作的时候,只需要用第R棵树减去第L-1棵树就是区 ...

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

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

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

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

  5. POJ 2104&HDU 2665 Kth number(主席树入门+离散化)

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

  6. POJ 2104 K-th Number(主席树——附讲解)

    Description You are working for Macrohard company in data structures department. After failing your ...

  7. poj 2104 K-th Number(主席树)

    Description You are working for Macrohard company in data structures department. After failing your ...

  8. poj 2104 K-th Number(主席树

    Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 59058   Accepted: 20529 Case Time Limi ...

  9. poj 2104: K-th Number 【主席树】

    题目链接 学习了一下主席树,感觉具体算法思路不大好讲.. 大概是先建个空线段树,然后类似于递推,每一个都在前一个“历史版本”的基础上建立一个新的“历史版本”,每个历史版本只需占用树高个空间(好神奇!) ...

  10. HDU 2665 Kth number(主席树静态区间第K大)题解

    题意:问你区间第k大是谁 思路:主席树就是可持久化线段树,他是由多个历史版本的权值线段树(不是普通线段树)组成的. 具体可以看q学姐的B站视频 代码: #include<cmath> #i ...

随机推荐

  1. 网络1711c语言第3次作业总结

    作业地址:https://edu.cnblogs.com/campus/jmu/JMUC--NE17111712/homework/1166 总结 1.评分细则 评分注意事项 注意用Markdown语 ...

  2. ajax的四种type类型

    1.GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改.增加数据,不会影响资源的内容,即该请求不会产生副作用.无论进行多少次操 ...

  3. :after/:before使用技巧

    伪类:after/:before基本使用 div:before{ content:'';//必须要写,没写则伪元素无效 display:; position:''; ... } //在一个div子元素 ...

  4. js前端对后台数据的获取,如果是汉字则需要添上引号

    js前端对后台数据的获取,如果是汉字则需要添上引号

  5. Lock(三)查看是谁把表给锁了

    查看是谁把表给锁了 select se1.inst_id as 被阻塞的会话节点, se2.inst_id as 罪魁祸首节点, se1.sid as 被阻塞的会话ID, ob.object_name ...

  6. Hangfire使用ApplicationInsigts监控

    起因 我司目前使用清真的ApplicationInsights(以下简称Ai)来做程序级监控.(Ai相关文档: https://azure.microsoft.com/zh-cn/services/a ...

  7. python的命名空间

    Python的命名空间是Python程序猿必须了解的内容,对Python命名空间的学习,将使我们在本质上掌握一些Python中的琐碎的规则. 接下来我将分四部分揭示Python命名空间的本质:一.命名 ...

  8. 新概念英语(1-111)The most expensive model

    Lesson 111 The most expensive model 最昂贵的型号 Listen to the tape then answer this question. Can Mr. Fri ...

  9. Spring知识点回顾(08)spring aware

    Spring知识点回顾(08)spring aware BeanNameAware 获得容器中的bean名称 BeanFactoryAware 获得当前的bean factory Applicatio ...

  10. spring-oauth-server实践:access_token的有效期分析

    1.access_token有效期检查 用expiration和new Date()比较!!!!!! 分析目标-->expiration什么时候设置,设置规则如何配置!!!!!!! 2.acce ...