K-th Number
Time Limit: 20000MS   Memory Limit: 65536K
Total Submissions: 45710   Accepted: 15199
Case Time Limit: 2000MS

Description

You are working for Macrohard company in data structures department. After failing your previous task about key insertion you were asked to write a new data structure that would be able to return quickly k-th order statistics in the array segment.  That is, given an array a[1...n] of different integer numbers, your program must answer a series of questions Q(i, j, k) in the form: "What would be the k-th number in a[i...j] segment, if this segment was sorted?"  For example, consider the array a = (1, 5, 2, 6, 3, 7, 4). Let the question be Q(2, 5, 3). The segment a[2...5] is (5, 2, 6, 3). If we sort this segment, we get (2, 3, 5, 6), the third number is 5, and therefore the answer to the question is 5.

Input

The first line of the input file contains n --- the size of the array, and m --- the number of questions to answer (1 <= n <= 100 000, 1 <= m <= 5 000).  The second line contains n different integer numbers not exceeding 109 by their absolute values --- the array for which the answers should be given.  The following m lines contain question descriptions, each description consists of three numbers: i, j, and k (1 <= i <= j <= n, 1 <= k <= j - i + 1) and represents the question Q(i, j, k).

Output

For each question output the answer to it --- the k-th number in sorted a[i...j] segment.

Sample Input

7 3
1 5 2 6 3 7 4
2 5 3
4 4 1
1 7 3

Sample Output

5
6
3

Hint

This problem has huge input,so please use c-style input(scanf,printf),or you may got time limit exceed.
 
题解:初看这个题,完全就感觉是神题,想不出思路,不敢暴力,其实哪有那么麻烦,可以先对序列排序,记录下其位置就好;然后对于每个询问,从1到n遍历一遍;看id在不在l,r之间;如果在就t--;当t等于0的时候,相当于找到了这个第k大的数,这就是答案;还有的大神用主席树,函数线段树,划分树什么的写的。。。。。我能说什么吗
代码:
extern "C++"{
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
typedef long long LL;
void SI(int &x){scanf("%d",&x);}
void SI(double &x){scanf("%lf",&x);}
void SI(char *x){scanf("%s",x);}
//void SI(LL &x){scanf("%lld",&x);} void PI(int &x){printf("%d",x);}
void PI(double &x){printf("%lf",x);}
void PI(char *x){printf("%s",x);}
//void PI(LL &x){printf("%lld",x);} }
const int MAXN = ;
struct Node{
int id,v;
bool operator < (const Node &b)const{
return v < b.v;
}
};
Node dt[MAXN];
int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
for(int i = ;i <= n;i++){
SI(dt[i].v);
dt[i].id = i;
}
sort(dt + ,dt + n + );
//for(int i = 1;i <= n;i++)printf("%d ",dt[i].v);puts("");
int l,r,t;
while(m--){
scanf("%d%d%d",&l,&r,&t);
for(int i = ;i <= n;i++){
if(dt[i].id >= l && dt[i].id <= r){
t--;
if(t == ){
printf("%d\n",dt[i].v);break;
}
}
}
}
}
return ;
}
 java:
package com.lanqiao.week1;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner; public class poj2104 {
private static Scanner cin;
private static int MOD = 1000000007;
static{
cin = new Scanner(System.in);
}
private static class Node{
int i, v;
}
public static void main(String[] args) {
int n, m;
n = cin.nextInt();
m = cin.nextInt();
Node[] arr = new Node[n];
for(int i = 0; i < n; i++){
arr[i] = new Node();
arr[i].i = i + 1;
arr[i].v = cin.nextInt();
}
Arrays.sort(arr, new Comparator<Node>() { @Override
public int compare(Node a, Node b) {
if(a.v != b.v){
return a.v - b.v;
}else{
return a.i - b.i;
}
} });
while(m-- > 0){
int s, e, k;
s = cin.nextInt();
e = cin.nextInt();
k = cin.nextInt();
int cnt = 0;
for(int i = 0; i < n ; i++){
if(arr[i].i >= s && arr[i].i <= e){
cnt ++;
if(cnt == k){
System.out.println(arr[i].v);
break;
}
}
}
}
} }

K-th Number(第k大数)的更多相关文章

  1. [Swift]LeetCode995. K 连续位的最小翻转次数 | Minimum Number of K Consecutive Bit Flips

    In an array A containing only 0s and 1s, a K-bit flip consists of choosing a (contiguous) subarray o ...

  2. 题目1040:Prime Number(第k个素数)

    题目链接:http://ac.jobdu.com/problem.php?pid=1040 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  3. [LeetCode] Minimum Number of K Consecutive Bit Flips 连续K位翻转的最小次数

    In an array A containing only 0s and 1s, a K-bit flip consists of choosing a (contiguous) subarray o ...

  4. 51 Nod 1116 K进制下的大数

    1116 K进制下的大数  基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 有一个字符串S,记录了一个大数,但不知这个大数是多少进制的,只知道这个数 ...

  5. 【leetcode】995. Minimum Number of K Consecutive Bit Flips

    题目如下: In an array A containing only 0s and 1s, a K-bit flip consists of choosing a (contiguous) suba ...

  6. [51nod1116]K进制下的大数

    解题关键:$A\% (k - 1) = (A[0] + A[1]*k + A[2]*{k^2} + ...A[n]*{k^n})\% (k - 1) = (A[0] + A[1] + ...A[n]) ...

  7. 快速排序/快速查找(第k个, 前k个问题)

    //快速排序:Partition分割函数,三数中值分割 bool g_bInvalidInput = false; int median3(int* data, int start, int end) ...

  8. [LeetCode] Top K Frequent Words 前K个高频词

    Given a non-empty list of words, return the k most frequent elements. Your answer should be sorted b ...

  9. [CareerCup] 13.1 Print Last K Lines 打印最后K行

    13.1 Write a method to print the last K lines of an input file using C++. 这道题让我们用C++来打印一个输入文本的最后K行,最 ...

  10. 一些简单的问题. 2的10次方与k (涉及到b k m的要用乘来解读)

    2的10次方是k k就表示2的10次方 2的16次方,解读为 2的6次方(64)*2的10次方(k)  简写为64k    64k=64*k 同理2的20次方  解读为2的10次方*2的10次方  k ...

随机推荐

  1. HDU4762(JAVA大数)

    Cut the Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  2. jar 查找多jar包中类的办法

    jar -tf 多个文件列表, 如jar -tf *.jar 或  jar -tf   a.jar  b.jar ,这样是无任何输出的. 解决办法为: find  . -name  "*.j ...

  3. jquery 绑定动态元素

    以一个小例子来简单说明下情况 ? 1 2 3 4 5 6 7 8  <script src="jquery-1.11.0.min.js"></script> ...

  4. Oracle使用NLSSORT函数实现汉字的排序

    1).按拼音首字母排序 SELECT * FROM T_TABLE ORDER BY NLSSORT(NAME, 'NLS_SORT=SCHINESE_PINYIN_M'); 2).按笔画排序SELE ...

  5. A Bug's Life

    #include<stdio.h> #include<string.h> ],num[]; int find(int x){ int r=x; while(r!=bug[r]) ...

  6. hdu1573X问题(不互素的中国剩余定理)

    X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. 杭电 3887 Counting Offspring

    根据上篇翻译的文章以及很多个帖子,都讲述了树状数组最基本的功能就是tree[i]保存的是位置i左边小于等于a[i]的数的个数. 这样也就可以解释代码中为什么有f[i]=getsum(sd[i-1])- ...

  8. ES6的模块化

    在之前的 javascript 中一直是没有模块系统的,前辈们为了解决这些问题,提出了各种规范, 最主要的有CommonJS和AMD两种.前者用于服务器,后者用于浏览器.而 ES6 中提供了简单的模块 ...

  9. 【快速选择算法与nth_element函数】【续UVA11300 】

    在白书中提到了一种O(n)级别的寻找中位数算法 就是我们今天要介绍的主角 快速选择算法 类似快排 选择一个比较元素 进行递归处理寻找第k大元素 假设最后比较元素到了i 以下描述是我写快排的常用字符 所 ...

  10. [Linked List]Copy List with Random Pointer

    Total Accepted: 53943 Total Submissions: 209664 Difficulty: Hard A linked list is given such that ea ...