- 浏览: 118533 次
- 性别:
- 来自: 北京
最新评论
这个题有多种做法
因为区间没有包含与被包含的,所以可以按照从左到右的顺序依次处理
处理到某个区间[i, j],可以通过确保[1, j]之间的元素都进入某个容器一次,且之后[1, i)之间的元素都出去某个容器一次,使得容器中存的是[i, j]之间的元素
然后要求这个容器能够高效地回答里面存的第k大的元素是多少,这步可以用各种平衡树或者树状数组+二分实现,我写的是线段树
因为区间没有包含与被包含的,所以可以按照从左到右的顺序依次处理
处理到某个区间[i, j],可以通过确保[1, j]之间的元素都进入某个容器一次,且之后[1, i)之间的元素都出去某个容器一次,使得容器中存的是[i, j]之间的元素
然后要求这个容器能够高效地回答里面存的第k大的元素是多少,这步可以用各种平衡树或者树状数组+二分实现,我写的是线段树
#include <cstdio> #include <algorithm> using namespace std; const int maxn = 100005; int tree[maxn * 4] = {0}, n, m; void change(int val, int d) { int low = 1, high = n, mid, node = 1; tree[1] += d; while (low < high) { mid = (low + high) / 2; if (val <= mid) { high = mid; node = node * 2; } else { low = mid + 1; node = node * 2 + 1; } tree[node] += d; } } int lower(int k) { int low = 1, high = n, mid, node = 1; while (low < high) { mid = (low + high) / 2; if (k <= tree[node * 2]) { high = mid; node = node * 2; } else { k -= tree[node * 2]; low = mid + 1; node = node * 2 + 1; } } return low; } struct interval { int left, right, k, dog, id; bool operator <(const interval &rr) const { return left < rr.left || left == rr.left && right < rr.right; } } in[50001 + 5]; struct data_t { int val, oldID, newID; } data[maxn]; bool cmp1(const data_t &a, const data_t &b) { return a.val < b.val; } bool cmp2(const data_t &a, const data_t &b) { return a.oldID < b.oldID; } int toVal[maxn], ans[maxn]; int main() { scanf("%d%d", &n, &m); for (int i = 1; i <= n; ++i) { scanf("%d", &data[i].val); data[i].oldID = i; } sort(data + 1, data + n + 1, cmp1); for (int i = 1; i <= n; ++i) { data[i].newID = i; toVal[i] = data[i].val; } sort(data + 1, data + n + 1, cmp2); for (int i = 1; i <= m; ++i) { scanf("%d%d%d", &in[i].left, &in[i].right, &in[i].k); in[i].id = i; } sort(in + 1, in + m + 1); int i, j, t; i = j = 1; for (t = 1; t <= m; ++t) { while (j <= in[t].right) change(data[j++].newID, 1); while (i < in[t].left) change(data[i++].newID, -1); in[t].dog = toVal[lower(in[t].k)]; } for (int i = 1; i <= m; ++i) ans[in[i].id] = in[i].dog; for (int i = 1; i <= m; ++i) printf("%d\n", ans[i]); return 0; }
发表评论
-
lower_bound and upper_bound
2012-02-09 00:36 1156/** * @brief Finds the ... -
HDU 3954
2012-02-05 10:43 842线段树变种,也是在2logn段上面做文章 /* * ... -
HDU 4027
2012-02-04 22:09 853线段树变种 在2logn段上面做文章,swap(x, y)太阴 ... -
ICPC编码建议
2011-10-28 09:52 888写代码最重要的是清晰,包括思路的清晰和代码结构的清晰。我们无法 ... -
[转载]TopCoder插件
2011-09-08 22:13 976转载自:http://acm.cugb.edu.cn/blog ... -
UVALive 5112 - Sales Prediction
2011-01-06 10:19 1190封装了矩阵类 比赛做得很郁闷,为什么别人写得很长、很罗嗦的代码 ... -
hdu 3236
2010-12-12 14:10 798终于能过这道题了,算是背包必做题之一吧 /* * Au ... -
pku 1018
2010-12-11 15:18 603写了两三个版本,最后这个效率最高 #include < ... -
布斯(Booth)乘法
2010-10-07 19:59 1140源自http://watashi.ws/blog/1515/z ... -
高斯消元
2010-10-07 14:18 804import java.util.*; import j ... -
整数划分
2010-10-07 10:38 841#include <cstdio> #inc ... -
Treap
2010-09-18 22:19 981// Treap // Tested: bjtu1057 ... -
矩阵快速幂
2010-09-18 14:24 1051typedef LL matrix[55][55]; ... -
maximum clique 最大团
2010-09-02 18:12 1134最大团模板 #include <cstdio> ... -
计算Jacobi符号
2010-08-31 13:15 1297Quadratic reciprocity The Jacob ... -
Java 高效I/O
2010-08-19 16:54 777static BufferedReader cin = ... -
DLX pku 3076
2010-08-11 23:45 880标准数独,精确覆盖 // pku3076.cpp #in ... -
DLX hust 1017
2010-08-11 16:50 849“精确覆盖”问题 #include <cstdio& ... -
DLX hdu 3498
2010-08-11 16:48 1042“多重覆盖”或“重复覆盖”问题 #include < ... -
hdu 3509
2010-08-09 11:22 1006推导公式的题目,矩阵幂关键就在于构造系数矩阵 备忘: S(n, ...
相关推荐
pku 2761(求区间内第k小的数) 我是用线段树去做的,好像也可用树状数组做的,稍微有一点注释在里面的^_^
pku acm 2752 Seek the Name, Seek the Fame代码 kmp算法。解题报告:http://blog.csdn.net/china8848
Now the only thing the house misses is a cute little wooden fence. He had no idea how to make a wooden fence, so he decided to order one. Somehow he got his hands on the ACME Fence Catalogue 2002, ...
pku acm 1274 The Perfect Stall 代码 二分图的最大匹配的匈牙利算法 解题报告请访问:http://blog.csdn.net/china8848
pku acm 1050 To the Max代码,有详细注释,动态规划
pku部分题代码,不多,试一下怎么上传文件!
c语言的代码,附有注释。用递归函数的解法,不仅代码简单,也容易理解,希望对需要它的人,有帮助!
Despite the fact that many 3D human activity benchmarks being proposed, most existing action datasets focus on the action recognition tasks for the segmented videos. There is a lack of standard large-...
pku1000 pku1000程序 解题报告
Pku acm 第1163题 The Triangle 代码,有详细的注释,动态规划
pku经典题目解题报告 pku经典题目解题报告
pku1664源代码
PKU JudgeOnline FAQ 中文版 常见问题解答
Pku acm 第1887题 Testing the CATCHER 代码,有详细的注释,动态规划
8数码代码pku1077,300ms(哈希+广度搜索)
ppt word PKU 课件 五星级灰常强大
ACM代码 北大pku。 搞ACM的可以参考一下。代码还是挺规范的。有接近150道题目的代码。
PKU 2339 Rock, Scissors, Paper 源代码
有一些代码是pku上的,希望大家看后给我留言,看看我的代码那里有问题??
pku acm 1469 COURSES 代码 二分图的最大匹配的匈牙利算法 解题报告请访问:http://blog.csdn.net/china8848