题目大意

给定一个有N个数字的序列,然后又m个查询,形式如下:

l r k 要求你返回区间[l,r]第k小的数是哪个

题解

终于弄懂主席树是个啥东西了,O(∩_∩)O~~,这题正是主席树的裸题,主席树具体是啥东西,可以去看CLJ的论文~~~~

代码是学习haha593572013大神的~~~

代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
#define MAXN 100005
#define lson l,m,ls[s]
#define rson m+1,r,rs[s]
int ls[20*MAXN],rs[20*MAXN];
int cnt[20*MAXN],T[MAXN];
int a[MAXN],num[MAXN],tot;
void build(int l,int r,int &s)
{
s=++tot;
cnt[s]=0;
if(l==r) return;
int m=(l+r)>>1;
build(lson);
build(rson);
}
void update(int last,int p,int l,int r,int &s)
{
s=++tot;
ls[s]=ls[last],rs[s]=rs[last];
cnt[s]=cnt[last]+1;
if(l==r) return;
int m=(l+r)>>1;
if(p<=m) update(ls[last],p,lson);
else update(rs[last],p,rson);
}
int query(int ss,int tt,int l,int r,int k)
{
if(l==r) return r;
int sum=cnt[ls[ss]]-cnt[ls[tt]];
int m=(l+r)>>1;
if(sum>=k) return query(ls[ss],ls[tt],l,m,k);
else return query(rs[ss],rs[tt],m+1,r,k-sum);
}
int main()
{
int kase;
scanf("%d",&kase);
while(kase--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
scanf("%d",&num[i]);
a[i]=num[i];
}
sort(a+1,a+n+1);
int len=unique(a+1,a+n+1)-a-1;
tot=0;
build(1,len,T[0]);
for(int i=1; i<=n; i++) num[i]=lower_bound(a+1,a+len+1,num[i])-a;
for(int i=1; i<=n; i++) update(T[i-1],num[i],1,len,T[i]);
while(m--)
{
int l,r,k;
scanf("%d%d%d",&l,&r,&k);
printf("%d\n",a[query(T[r],T[l-1],1,len,k)]);
}
}
return 0;
}

POJ2104&&HDU2665(静态区间第K小)的更多相关文章

  1. Dynamic Rankings || 动态/静态区间第k小(主席树)

    JYF大佬说,一星期要写很多篇博客才会有人看 但是我做题没有那么快啊QwQ Part1 写在前面 区间第K小问题一直是主席树经典题=w=今天的重点是动态区间第K小问题.静态问题要求查询一个区间内的第k ...

  2. POJ2104 K-th Number —— 区间第k小 整体二分

    题目链接:https://vjudge.net/problem/POJ-2104 K-th Number Time Limit: 20000MS   Memory Limit: 65536K Tota ...

  3. [luogu3834]静态区间第k小【主席树】

    传送门:https://www.luogu.org/problemnew/show/P3834 题目描述 如题,给定N个整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 分析 很多人都说是用 ...

  4. 静态区间第K小(整体二分、主席树)

    题目链接 题解 主席树入门题 但是这里给出整体二分解法 整体二分顾名思义是把所有操作放在一起二分 想想,如果求\([1-n]\)的第\(k\)小怎么二分求得? 我们可以二分答案\(k\), \(O(n ...

  5. POJ2104 K-th Number —— 静态区间第k小

    题目链接:http://poj.org/problem?id=2104 K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Sub ...

  6. POJ- 2104 hdu 2665 (区间第k小 可持久化线段树)

    可持久化线段树 也叫函数式线段树也叫主席树,其主要思想是充分利用历史信息,共用空间 http://blog.sina.com.cn/s/blog_4a0c4e5d0101c8fr.html 这个博客总 ...

  7. 主席树初步 HDU2665的区间第k小

    首先看一下这个人的blog吧,讲的精炼http://blog.sina.com.cn/s/blog_4a0c4e5d0101c8fr.html 然后再推荐一下这个人的blog:http://www.c ...

  8. 洛谷.3834.[模板]可持久化线段树(主席树 静态区间第k小)

    题目链接 //离散化后范围1~cnt不要错 #include<cstdio> #include<cctype> #include<algorithm> //#def ...

  9. 静态区间第k小 - 整体二分

    蒟蒻终于学会整体二分啦! 思路 实现 丑陋无比的代码 #include <bits/stdc++.h> using namespace std; const int N = 200005; ...

随机推荐

  1. Unity3d Shader开发(三)Pass(Alpha testing )

    透明度测试是阻止像素被写到屏幕的最后机会. 在最终渲染出的颜色被计算出来之后,可选择通过将颜色的透明度值和一个固定值比较.如果比较的结果失败,像素将不会被写到显示输出中. Syntax 语法 Alph ...

  2. android开发之---文字居中---android中去掉标题栏

    1. 让textView里面的内容水平居中 :    android:gravity="center_horizontal" 2. 让textView控件在它的父布局里水平居中   ...

  3. 静态页面参数传递&回调函数写法&快速排序的实现方法

    相信很多人都有一种陋习,就是收藏的文章,几乎从来都没有回过头来仔细看过.这次借着这次活动的机会,在<无懈可击的web设计>一书的学习过程中,穿插着讲自己曾经收藏过的,现在觉得还有价值的文章 ...

  4. C# 发送邮件实例代码

    1.构造附件 static List<Attachment> BuildAttachments(List<EmailFile> files) { ) { return null ...

  5. python image模块

    Image 模块 Image 模块提供了同名的类用来表示PIL的图像.Image模块还提供了许多工厂(factory)函数,包块从文件加载图像的函数,以及创建新图像的函数.    例子  下面的脚本加 ...

  6. POJ2221+模拟

    参考http://blog.sina.com.cn/s/blog_7de5c6210100tm1h.html 其实是水题............ #include<string.h> #i ...

  7. Java简单文件传输 socket简单文件传输示例

    服务器端代码: import java.io.*; import java.net.*; /** * Created with IntelliJ IDEA. * User: HYY * Date: 1 ...

  8. 去除Coding4Fun中MessagePrompt的边框(Border)

    在App.xaml文件中添加 xmlns:c4f="clr-namespace:Coding4Fun.Toolkit.Controls;assembly=Coding4Fun.Toolkit ...

  9. Android 去除list集合中重复项的几种方法

    因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List<"}; List<string> li2 = new List<string& ...

  10. Context 之我见

    Context这个单词在程序开发中屡见不鲜,我记得以前在博客中写过一些关于这个词语的自我解释,但是我这个人有一个毛病就是健忘,如果不将自己的想法写下,不出十分钟,就被我抛到九霄云外. 真我现在还有点想 ...