码迷,mamicode.com
首页 > 其他好文 > 详细

[POJ2104]K-th Number(区间第k值 记录初始状态)

时间:2016-02-29 12:19:25      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://poj.org/problem?id=2104

给n个数和m个查询,查询[i, j]内第k小的数是多少。(主席树、划分树那种高大上的姿势叒不会啊QAQ

可以在维护这n个数的同时维护刚刚输入的时候他们的下标,之后预处理排序一次,查询的时候假如初始下标在[i,j]内,那么k自减1,直到k为0。

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19 
20 using namespace std;
21 
22 typedef struct Node {
23     int id;
24     int x;
25     Node() {}
26     Node(int ii, int xx) : id(ii), x(xx) {}
27 }Node;
28 
29 const int maxn = 111111;
30 int n, m;
31 Node a[maxn];
32 
33 bool cmp(Node x, Node y) {
34     return x.x < y.x;
35 }
36 
37 int main() {
38     // freopen("in", "r", stdin);
39     int tmp;
40     while(~scanf("%d %d", &n, &m)) {
41         for(int i = 0; i < n; i++) {
42             scanf("%d", &tmp);
43             a[i] = Node(i+1, tmp);
44         }
45         sort(a, a+n, cmp);
46         while(m--) {
47             int i, j, k, ans = 0;
48             scanf("%d %d %d", &i, &j, &k);
49             for(int s = 0; s < n; s++) {
50                 if(a[s].id >= i && a[s].id <= j) k--;
51                 if(k == 0) {
52                     printf("%d\n", a[s].x);
53                     break;
54                 }
55             }
56         }
57     }
58     return 0; 
59 }

 

[POJ2104]K-th Number(区间第k值 记录初始状态)

标签:

原文地址:http://www.cnblogs.com/vincentX/p/5226943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!