博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 2665 Kth number
阅读量:5280 次
发布时间:2019-06-14

本文共 2160 字,大约阅读时间需要 7 分钟。

Time limit 5000 ms

Memory limit 32768 kB

OS Windows

Source )

解题思路

主席树求静态区间第k大

博客越来越敷衍了
另一道更基础一点的可持久化线段树的题,

源代码

下面的代码可以AC,但是其实开的全局数组已经七十兆了(空间限制32兆),能过的原因我猜是每个case之间没有使用memset清零,而是直接在下一个case赋值,所以那些用不到的空间就不会去碰,然后就没有报RE或MLE。试了一下,用memset清零果然MLE了。Ps:另外,最近每一篇分享给同学的博客都被或多或少指出几个错误,有交流才有提高啊……我菜死了

#include 
#include
int T;int n, m;int a[200010];int val[200010], sz;inline int id(int x) { return std::lower_bound(val + 1, val + 1 + sz, x) - val; }struct Node{ int sum; int lson, rson;}tree[6000010];int root[200010],cnt=1;void build(int &rt, int l, int r){ rt = cnt++; tree[rt]={0,0,0}; if (l == r) return; int mid = l + r >> 1; build(tree[rt].lson, l, mid); build(tree[rt].rson, mid + 1, r);}void update(int &rt, int last, int l, int r, int pos){ rt = cnt++; tree[rt] = tree[last]; tree[rt].sum++; if (l == r) return; int mid = l + r >> 1; if (pos > mid) update(tree[rt].rson, tree[last].rson, mid + 1, r, pos); else update(tree[rt].lson, tree[last].lson, l, mid, pos);}int que(int srt, int trt, int l, int r, int k){ if (l == r) return l; int mid = l + r >> 1; int delta = tree[tree[trt].lson].sum - tree[tree[srt].lson].sum; if (k <= delta) return que(tree[srt].lson, tree[trt].lson, l, mid, k); else return que(tree[srt].rson, tree[trt].rson, mid + 1, r, k - delta);}int main(){ //freopen("test.in","r",stdin); scanf("%d", &T); while (T--) { cnt = 1; scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); val[i] = a[i]; } std::sort(val + 1, val + 1 + n); sz = std::unique(val + 1, val + 1 + n) - (val + 1); build(root[0], 1, sz); for (int i = 1; i <= n; i++) { a[i] = id(a[i]); update(root[i], root[i - 1], 1, sz, a[i]); } for (int i = 1, ll, rr, k; i <= m; i++) { scanf("%d%d%d", &ll, &rr, &k); printf("%d\n", val[que(root[ll - 1], root[rr], 1, sz, k)]); } } return 0;}

转载于:https://www.cnblogs.com/wawcac-blog/p/11238831.html

你可能感兴趣的文章
程序存储问题
查看>>
优雅地书写回调——Promise
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
css & input type & search icon
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
MetaWeblog API Test
查看>>
移动、尺寸改变
查看>>
c# 文件笔记
查看>>
类和结构
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
Java 中 静态方法与非静态方法的区别
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
线程池的概念
查看>>