[河南省队2012] 找第k小的数
★★☆ 输入文件: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小的数的更多相关文章
- 【COGS 1534】 [NEERC 2004]K小数 &&【COGS 930】 [河南省队2012] 找第k小的数 可持久化01Trie
板子题,只是记得负数加fix最方便 #include <cstdio> ,N=; namespace FIFO { <<],*S=B,*T=B; #define getc() ...
- COGS 930. [河南省队2012] 找第k小的数
题目描述 看到很短的题目会让人心情愉悦,所以给出一个长度为N的序列A1,A2,A3,...,AN, 现在有M个询问,每个询问都是Ai...Aj中第k小的数等于多少. 输入格式 第一行两个正整数N,M. ...
- COGS 930. [河南省队2012] 找第k小的数 主席树
主席树裸板子 #include<cstdio> #include<iostream> #include<algorithm> #define MAXN 100005 ...
- [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 ...
- cogs930找第k小的数(k-th number)
cogs930找第k小的数(k-th number) 原题链接 题解 好题... 终极版是bzoj3065(然而并不会) 先讲这个题... 维护\(n+1\)个值域线段树(用主席树),标号\(0\) ...
- [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 ...
- 快速排序算法的实现 && 随机生成区间里的数 && O(n)找第k小 && O(nlogk)找前k大
思路:固定一个数,把这个数放到合法的位置,然后左边的数都是比它小,右边的数都是比它大 固定权值选的是第一个数,或者一个随机数 因为固定的是左端点,所以一开始需要在右端点开始,找一个小于权值的数,从左端 ...
- 17082 两个有序数序列中找第k小
17082 两个有序数序列中找第k小 时间限制:1000MS 内存限制:65535K 提交次数:0 通过次数:0 题型: 编程题 语言: 无限制 Description 已知两个已经排好序(非减 ...
- 17082 两个有序数序列中找第k小(优先做)
17082 两个有序数序列中找第k小(优先做) 时间限制:1000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC;VC Description 已 ...
随机推荐
- 汇编程序49:实验14 访问CMOS RAM(显示系统时间)
assume cs:code ;安装程序,使用指令out和in指令 code segment start: mov ax,cs mov ds,ax mov si,offset sub1 mov ax, ...
- window后台运行java jar文件
第一种需要一直开着dos界面: java -jar jar文件路径 第二种无需一直开着dos界面: 1.新建my-service.bat文件,内容如下: @echo off START "m ...
- 二分图判定+点染色/并查集 BestCoder Round #48 ($) 1002 wyh2000 and pupil
题目传送门 /* 二分图判定+点染色:因为有很多联通块,要对所有点二分图匹配,若不能,存在点是无法分配的,no 每一次二分图匹配时,将点多的集合加大最后第一个集合去 注意:n <= 1,no,两 ...
- apache hadoop 伪分布式安装
1. 准备工作 1.1. 软件准备 1.安装VMWare 2.在VMWare上安装CentOS6.5 3.安装XShell5,用来远程登录系统 4.通过rpm -qa | grep ssh 检查cen ...
- Farseer.net轻量级开源框架 入门篇:查询数据详解
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 删除数据详解 下一篇:Farseer.net轻量级开源框架 中级篇: Where条 ...
- Farseer.net轻量级开源框架 中级篇:执行SQL语句
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 事务的使用 下一篇:Farseer.net轻量级开源框架 中级篇: DbFacto ...
- 更新html技术比较
document.write() document对象的write方法可以很简单的向页面的源代码中添加内容,不过不推荐使用. 优点:可以快速简单的让初学者理解如何向页面添加内容: 缺点: 只有页面初始 ...
- POJ_1611_The Suspect
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 25149 Accepted: 12329 De ...
- Xcode 6 Beta 高速官方下载地址
推荐迅雷下载: http://adcdownload.apple.com//wwdc_2014/xcode_6_beta_ie8g3n/xcode_6_beta.dmg
- 有关bash,我希望我能知晓的十件事
简介 我之前的一篇文章比我预想的更受欢迎,因此我想再写一篇文章来介绍一些不太知名的bash功能 正如之前所言,由于我觉得bash是一种要经常使用(且需理解)的技术,所以我在研究bash时写了一本书.虽 ...