POJ2104 —— K-th number
1、题目大意:区间第k小,什么修改没有。。。
2、分析:这个是可持久化线段树,也是主席树,解释一下,n个线段树是怎么存下的,就是每一颗线段树和前一个有logn个点不一样
然后我们只需要一个线段树开logn的空间,然后其他的指针指向上一个线段树对应的地方也是可以的对吧
然后。。然后就没了。。
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; int a[2000010], l[2000010]; pair<int , int> b[2000010]; int T[2000010], ls[2000010], rs[2000010]; int h[2000010]; int cnt[2000010]; int tot; int num = 0; inline int insert(int root, int pos){ int nroot = ++ tot; int ret = nroot; int l = 1, r = num; cnt[nroot] = cnt[root] + 1; while(l < r){ int mid = (l + r) / 2; if(pos <= mid){ r = mid; ls[nroot] = ++ tot; rs[nroot] = rs[root]; nroot = ls[nroot]; root = ls[root]; cnt[nroot] = cnt[root] + 1; } else { l = mid + 1; ls[nroot] = ls[root]; rs[nroot] = ++ tot; nroot = rs[nroot]; root = rs[root]; } cnt[nroot] = cnt[root] + 1; } return ret; } inline int query(int lll, int rrr, int k){ int l = 1, r = num; int le_ = T[lll - 1]; int ri_ = T[rrr]; while(l < r){ int mid = (l + r) / 2; int q = cnt[ls[ri_]] - cnt[ls[le_]]; if(k <= q){ r = mid; le_ = ls[le_]; ri_ = ls[ri_]; } else{ l = mid + 1; k -= q; le_ = rs[le_]; ri_ = rs[ri_]; } } return l; } int main(){ int n, m; scanf("%d%d", &n, &m); for(int i = 1; i <= n; i ++){ scanf("%d", &a[i]); b[i] = make_pair(a[i], i); } sort(b + 1, b + n + 1); b[0].first = -2147483647; for(int i = 1; i <= n; i ++){ if(b[i].first != b[i - 1].first) num ++; l[b[i].second] = num; h[num] = b[i].second; } T[0] = 1; tot = 1; for(int i = 1; i <= n; i ++) T[i] = insert(T[i - 1], l[i]); for(int i = 1; i <= m; i ++){ int l, r, k; scanf("%d%d%d", &l, &r, &k); printf("%d\n", a[h[query(l, r, k)]]); } return 0; }
POJ2104 —— K-th number的更多相关文章
- [POJ2104] K – th Number (可持久化线段树 主席树)
题目背景 这是个非常经典的主席树入门题--静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入输 ...
- 【POJ2104】K-th Number
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABToAAAJ2CAIAAADwi6oDAAAgAElEQVR4nOy9a5Pj1nnvi0/Q71Llj3
- C++之路进阶——poj2104(K-th Number)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 44537 Accepted: 14781 Ca ...
- 【poj2104】K-th Number 主席树
题目描述 You are working for Macrohard company in data structures department. After failing your previou ...
- 【POJ2104】K-th Number(主席树)
题意:有n个数组成的序列,要求维护数据结构支持在线的下列两种操作: 1:单点修改,将第x个数修改成y 2:区间查询,询问从第x个数到第y个之间第K大的数 n<=100000,a[i]<=1 ...
- poj2104:K-th Number
思路:可持久化线段树,利用权值线段树,把建树过程看成插入,插入第i个元素就在第i-1棵树的基础上新建结点然后得到第i棵树,那么询问区间[l,r]就是第r棵树上的信息对应减去第l-1棵树上的信息,然后再 ...
- POJ2104:K-th Number——题解
http://poj.org/problem?id=2104 题目大意:求区间第k小. —————————————————————————— 主席树板子题. ……我看了半天现在还是一知半解的状态所以应 ...
- poj2104 K大数 划分树
题意:给定一个数列,求一个区间的第K大数 模板题, 其中的newl, newr 有点不明白. #include <iostream> #include <algorithm> ...
- ACM-ICPC 2018 沈阳赛区网络预赛 K. Supreme Number
A prime number (or a prime) is a natural number greater than 11 that cannot be formed by multiplying ...
- 整体二分初识--POJ2104:K-th Number
n<=100000个数有m<=5000个询问,每次问区间第k大. 方法一:主席树!…… 方法二:整体二分. 整体二分一次性计算半个值域对一个区间的询问的贡献,然后根据“这半边的贡献在某个询 ...
随机推荐
- lunix的查看Tomcat目录下日志的快速操作
可以使用cd命令,cd命令的功能是切换到指定的目录: 命令格式:cd [目录名] 有几个符号作为目录名有特殊的含义: "/"代表根目录. ".."代表上一级目录 ...
- wpf的毛边窗体效果 前台代码
<Window x:Class="wpfwindowsmove.毛边窗体" xmlns="http://schemas.microsoft.com/w ...
- tomcat7.0配置CORS(跨域资源共享)
平时我们做前台页面时可能会遇到浏览器以下提示(浏览器控制台): 已阻止跨源请求:同源策略禁止读取位于 http://xxx.xxx.com 的远程资源.(原因:CORS 头缺少 'Access-Con ...
- day4之函数
很快就第4天了,原来人是有惰性的,博客现在就不想写了,真是悲催,坚持,憋住. 函数 def func(name): print(name) func("huihuang") 函数定 ...
- OpenGL Tutorial
https://open.gl https://www.processing.org/tutorials/pshader/
- jexus jws 安装
cd /tmp wget linuxdot.net/down/jexus--x64.tar.gz tar -zxvf jexus--x64.tar.gz mv jexus /usr rm -rf /t ...
- webapi输入验证过滤器ValidationActionFilter
public class validationActionFilter:ActionFilterAttribute { public override void OnActionExecuting(S ...
- 表达式拼接Expression<Func<IEntityMapper, bool>> predicate
/// <summary> /// 重写以筛选出当前上下文的实体映射信息 /// </summary> protected override IEnumerable<IE ...
- OC-常见错误 方法与函数的区别
对象方法: 1,减号 - 2,声明必须写在@interface和@end之间 实现必须写在@implement 和@end之间 3,对象方法只能由对象来调用 4,对象方法归类.对象所有 函数: 函 ...
- swift错误和异常处理
异常 (exception) 和错误 (error). 在 Objective-C 开发中,异常往往是由程序员的错误导致的 app 无法继续运行,比如我们向一个无法响应某个消息的NSObject 对象 ...