POJ 2104 求序列里第K大 主席树裸题
给定一个n的序列,有m个询问 每次询问求l-r 里面第k大的数字是什么
只有询问,没有修改
可以用归并树和划分树(我都没学过。。囧)
我是专门冲着弄主席树来的
对主席树的建树方式有点了解了,不过这题为什么是在主席树里面这么操作的 还是有点不懂,今天照着模板敲了一遍就打多校了
再研究吧
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- const int maxn=110010;
- const int maxm=maxn*30;
- int n,m,tot,s;
- int A[maxn],t[maxn],T[maxn];
- int c[maxm],lson[maxm],rson[maxm];
- int build(int l,int r)
- {
- int rt=++tot;
- c[rt]=0;
- if (l>=r) return rt;
- int mid=(l+r)>>1;
- lson[rt]=build(l,mid);
- rson[rt]=build(mid+1,r);
- return rt;
- }
- int update(int rt,int pos,int val)
- {
- int newrt=++tot,tmp=newrt;
- c[newrt]=c[rt]+val;
- int l=1,r=s;
- while (l<r)
- {
- int mid=(l+r)>>1;
- if (pos<=mid){
- r=mid;
- lson[newrt]=++tot;rson[newrt]=rson[rt];
- newrt=lson[newrt];rt=lson[rt];
- }
- else{
- l=mid+1;
- rson[newrt]=++tot;lson[newrt]=lson[rt];
- newrt=rson[newrt];rt=rson[rt];
- }
- c[newrt]=c[rt]+val;
- }
- return tmp;
- }
- int query(int lrt,int rrt,int k)
- {
- int l=1,r=s;
- while (l<r)
- {
- int mid=(l+r)>>1;
- if (c[lson[lrt]]-c[lson[rrt]]>=k){
- r=mid;
- lrt=lson[lrt];
- rrt=lson[rrt];
- }
- else
- {
- l=mid+1;
- k-=c[lson[lrt]]-c[lson[rrt]];
- lrt=rson[lrt];
- rrt=rson[rrt];
- }
- }
- return l;
- }
- int main()
- {
- while (scanf("%d%d",&n,&m)!=EOF)
- {
- //memset(c,0,sizeof c);
- tot=0;
- for (int i=1;i<=n;i++) scanf("%d",&A[i]),t[i]=A[i];
- sort(t+1,t+1+n);
- //t[0]=0;
- s=unique(t+1,t+1+n)-t-1;
- //cout<<s<<endl;
- T[n+1]=build(1,s);
- for (int i=n;i>=1;i--){
- int pos=lower_bound(t+1,t+s+1,A[i])-t;
- T[i]=update(T[i+1],pos,1);
- }
- while (m--)
- {
- int l,r,k;
- scanf("%d%d%d",&l,&r,&k);
- int ans=query(T[l],T[r+1],k);
- printf("%d\n",t[ans]);
- }
- }
- return 0;
- }
POJ 2104 求序列里第K大 主席树裸题的更多相关文章
- POJ 2104(K-th Number-区间第k大-主席树)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 31790 Accepted: 9838 Cas ...
- 【POJ】2104 K-th Number(区间k大+主席树)
http://poj.org/problem?id=2104 裸题不说.主席树水过. #include <cstdio> #include <iostream> #includ ...
- POJ-2104-K-th Number(区间第K大+主席树模板题)
Description You are working for Macrohard company in data structures department. After failing your ...
- 计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational 南昌邀请赛网络赛)
Distance on the tree DSM(Data Structure Master) once learned about tree when he was preparing for NO ...
- [POJ 2104]K-th Number【模板】(主席树)
题目背景 这是个非常经典的主席树入门题——静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入输 ...
- POJ 2104 静态找区间第k大
静态区间第k大的问题,往往可以利用主席树来解决 这是主席树的第一道题 主席树大概可以理解为在n个节点上都建立一棵线段树,但是想想会超出内存 每一个节点保存的线段树都记录当前整段前缀区间的信息 但是因为 ...
- Count on a tree(SPOJ COT + 树上第k大 + 主席树 + LCA)
题目链接:https://www.spoj.com/problems/COT/en/ 题目: 题意: 给你一棵有n个节点的树,求节点u到节点v这条链上的第k大. 思路: 我们首先用dfs进行建题目给的 ...
- 主席树----POJ 2104(主席树裸题)(转)
首先来介绍一下我们需求:给你n个数,多次问你某个区间内的第k小是哪个数 主席树: 主席树的全名应该是 函数式版本的线段树.加上附带的一堆 technology.. ..总之由于原名字太长了,而且 “主 ...
- HDU2665 求区间第K大 主席树
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2665 代码: //#include<bits/stdc++.h> #include< ...
随机推荐
- JS链接转换为二维码
这里用到一个JQ插件 qrcode.js 下载地址https://github.com/jeromeetienne/jquery-qrcode 先引入 <script src="j ...
- 1-m*n循环填数(用标记数组)blibli2018秋招第三题一个类型
#include <iostream> #include<string> #include<algorithm> using namespace std; ; in ...
- myeclipse中svn图标状态不显示问题的解决办法
myeclipse中svn图标状态不显示问题的解决办法 博客分类: svn SVNMyeclipse工作WindowsC myeclipse中使用 svn 插件,原本正常,未作任何更改,突然有一天, ...
- 什么叫github
git remote add origin https://github.com/huiwangui/git-demo.git:表示在本地仓库关联远程仓库(https://github.com/hui ...
- query.locate过个过滤参数
需要引用Variants locate( 'typeid;name',vararrayof([key1,key2]),[]);
- redis.rpm 安装
yum install jemalloc wget http://www6.atomicorp.com/channels/atomic/centos/6/x86_64/RPMS/redis-3.0.7 ...
- Linux打印变量、环境配置、别名和文件删除操作
一.打印命令 1.echo打印命令 a.打印环境变量 echo $Path b.打印Path命令目录 which,比如:which ls表示打印的是Path目录中第一定义的全局变量的目录中命令. 二. ...
- 吴裕雄--天生自然JAVA数据库编程:执行数据库更新操作
import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.Statement ; public clas ...
- P1061 判断题
P1061 判断题 转跳点:
- 回收 PV【转】
当 PV 不再需要时,可通过删除 PVC 回收. 当 PVC mypvc1 被删除后,我们发现 Kubernetes 启动了一个新 Pod recycler-for-mypv1,这个 Pod 的作用就 ...