★★☆   输入文件:kth.in   输出文件:kth.out   简单对比
时间限制:1 s   内存限制:128 MB

题目描述

看到很短的题目会让人心情愉悦,所以给出一个长度为N的序列A1,A2,A3,...,AN,

现在有M个询问,每个询问都是Ai...Aj中第k小的数等于多少。

输入格式
第一行两个正整数N,M。
第二行N个数,表示序列A1,A2,...,AN。
紧着的M行,每行三个正整数i,j,k(k≤j-i+1),表示

询问Ai...Aj中第k小的数等于多少。

输出格式

共输出M行,第i行输出第i个询问的答案。

样例输入1:
4 3
4 1 2 3
1 3 1
2 4 3

1 4 4

样例输出1:
1
3
4
样例输入2:
5 5
4 2 9 9 10
1 3 1
2 4 3
1 4 4
3 5 2
2 5 2
样例输出2:
2
9
9
9
9
注释:
询问区间的第k小值并非严格第k小,例如样例2中第4个询问,询问3到5中第2小的数,
答案输出9,并不是严格第2小的10。
数据范围:
在50%的数据中,1<=N<=10000,1<=M<=10000,A[i]<=100000;
在100%的数据中,1<=N<=100000,1<=M<=100000,A[i]<=1000000;
思路:主席树+权值线段树
代码实现:
 #include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e5+;
int n,k,sz,ts;
int a,b,c;
int s[maxn],hs[maxn],tt[maxn];
struct tree{int s,l,r,mid,lp,rp;}t[maxn<<];
void build(int l,int r,int k){
t[k].l=l,t[k].r=r;
t[k].mid=l+r>>;
if(l==r) return;
t[k].lp=++ts,t[k].rp=++ts;
build(l,t[k].mid,t[k].lp);
build(t[k].mid+,r,t[k].rp);
}
void put(int l,int r,int k,int nk,int p){
t[nk]=(tree){t[k].s+,t[k].l,t[k].r,t[k].mid};
if(l==r) return;
if(p<=t[nk].mid){
t[nk].lp=++ts,t[nk].rp=t[k].rp;
put(l,t[nk].mid,t[k].lp,t[nk].lp,p);
}
else{
t[nk].rp=++ts,t[nk].lp=t[k].lp;
put(t[nk].mid+,r,t[k].rp,t[nk].rp,p);
}
}
int search(int k,int nk,int v){
if(t[k].l==t[k].r) return t[k].l;
int w=t[t[nk].lp].s-t[t[k].lp].s;
if(v<=w) return search(t[k].lp,t[nk].lp,v);
else return search(t[k].rp,t[nk].rp,v-w);
}
int main(){
freopen("kth.in","r",stdin);
freopen("kth.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++){
scanf("%d",&s[i]);
hs[i]=s[i];
}
sort(hs+,hs+n+);
sz=unique(hs+,hs+n+)-hs-;
build(,sz,tt[]);
for(int i=;i<=n;i++){
int pos=lower_bound(hs+,hs+sz+,s[i])-hs;
tt[i]=++ts;
put(,sz,tt[i-],tt[i],pos);
}
for(int i=;i<=k;i++){
scanf("%d%d%d",&a,&b,&c);
printf("%d\n",hs[search(tt[a-],tt[b],c)]);
}
return ;
}

钦定的板子。

题目来源:COGS

[河南省队2012] 找第k小的数的更多相关文章

  1. 【COGS 1534】 [NEERC 2004]K小数 &&【COGS 930】 [河南省队2012] 找第k小的数 可持久化01Trie

    板子题,只是记得负数加fix最方便 #include <cstdio> ,N=; namespace FIFO { <<],*S=B,*T=B; #define getc() ...

  2. COGS 930. [河南省队2012] 找第k小的数

    题目描述 看到很短的题目会让人心情愉悦,所以给出一个长度为N的序列A1,A2,A3,...,AN, 现在有M个询问,每个询问都是Ai...Aj中第k小的数等于多少. 输入格式 第一行两个正整数N,M. ...

  3. COGS 930. [河南省队2012] 找第k小的数 主席树

    主席树裸板子 #include<cstdio> #include<iostream> #include<algorithm> #define MAXN 100005 ...

  4. [LeetCode] Find K-th Smallest Pair Distance 找第K小的数对儿距离

    Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pai ...

  5. cogs930找第k小的数(k-th number)

    cogs930找第k小的数(k-th number) 原题链接 题解 好题... 终极版是bzoj3065(然而并不会) 先讲这个题... 维护\(n+1\)个值域线段树(用主席树),标号\(0\) ...

  6. [LeetCode] 719. Find K-th Smallest Pair Distance 找第K小的数对儿距离

    Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pai ...

  7. 快速排序算法的实现 && 随机生成区间里的数 && O(n)找第k小 && O(nlogk)找前k大

    思路:固定一个数,把这个数放到合法的位置,然后左边的数都是比它小,右边的数都是比它大 固定权值选的是第一个数,或者一个随机数 因为固定的是左端点,所以一开始需要在右端点开始,找一个小于权值的数,从左端 ...

  8. 17082 两个有序数序列中找第k小

    17082 两个有序数序列中找第k小 时间限制:1000MS  内存限制:65535K 提交次数:0 通过次数:0 题型: 编程题   语言: 无限制 Description 已知两个已经排好序(非减 ...

  9. 17082 两个有序数序列中找第k小(优先做)

    17082 两个有序数序列中找第k小(优先做) 时间限制:1000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC;VC Description 已 ...

随机推荐

  1. Linux学习笔记之Linux用户与用户组、文件操作命令、文件权限剖析

    1.用户与用户组 Linux是一个多用户操作系统,通过用户与用户组的概念,可以实现保证安全性和隐私性.任何一个文件都具有User.Group.Others三个权限. 文件拥有者(Linux下所有的东西 ...

  2. 309 Best Time to Buy and Sell Stock with Cooldown 买股票的最佳时间含冷冻期

    Say you have an array for which the ith element is the price of a given stock on day i.Design an alg ...

  3. 295 Find Median from Data Stream 数据流的中位数

    中位数是排序后列表的中间值.如果列表的大小是偶数,则没有中间值,此时中位数是中间两个数的平均值.示例:[2,3,4] , 中位数是 3[2,3], 中位数是 (2 + 3) / 2 = 2.5设计一个 ...

  4. 中国移动Lumia机强制升级Windows10手机开发者预览版的方法

    [最新消息4-9]微软已经确定将于PST太平洋标准时间周五上午十点也就是北京时间本周六(4-11)凌晨一点推送更新Windows10手机预览版 但是推送更新的机型不包括Lumia Icon 和930 ...

  5. Python学习日记之读取中文目录

    unicode # -*- coding:utf-8 -*- import os import shutil ins="E:\\学习资料" dir=unicode(ins,'utf ...

  6. Spartan6系列之Spartan6系列之芯片时钟资源深入详解

    1.   时钟资源概述 时钟设施提供了一系列的低电容.低抖动的互联线,这些互联线非常适合于传输高频信号.最大量减小时钟抖动.这些连线资源可以和DCM.PLL等实现连接. 每一种Spartan-6芯片提 ...

  7. map 用法

    map 是一种关联容器,  提供一对一的关联, 关联的形式为: KEY----VALUE     关键字不重复.multimap与map类似,但是允许关键字重复 即:关键字和与之对应的值 关键字起到索 ...

  8. v-bind、v-on、计算属性

    v-bind 缩写 <!-- 完整语法 --> <a v-bind:href="url">...</a> <!-- 缩写 --> & ...

  9. spring源码下载链接

    http://www.blogjava.net/zhyiwww/archive/2014/10/17/418809.html

  10. 13jsp、javaWeb开发模式

    13jsp.javaWeb开发模式-2018/07/25 1.jsp jsp实际上就是servlet.jsp=html+java,为用户提供动态内容 不适合编写Java逻辑 2.JSP原理 翻译(生成 ...