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< ...
随机推荐
- Python字符串(一)
一.get char 1.获取单个字符 字符串中的每一个字符都会对应一个唯一的下标(索引)用来表示字符串中的位置.下标从0开始依次增加:0对应的是第一个字符:也可以从从-1开始依次减小,-1代表最后一 ...
- Day1学习总结
# 1.print()# 2.input()# 3.if:# elif# else#4.while循环#5.for i in range()#6.break.continue#7.import ran ...
- 、第1节 kafka消息队列:8、9、kafka的配置文件server.properties的说明
10.kafka的配置文件说明 Server.properties配置文件说明 #broker的全局唯一编号,不能重复 broker.id=0 #用来监听链接的端口,producer或consumer ...
- docker学习笔记-05:Docker安装mysql和redis
一.安装mysql 1.docker hub 上查找mysql镜像 docker search mysql 2.从docker hub (使用阿里云加速器)拉取mysql镜像到本地标签为5.6 doc ...
- CSP-S2019 爆炸记
DAY -1 停课的第五天.早上来机房教练居然不在,先看了一道憨题,发现ST表+二分查找nlogn水过,然后发现单调栈可以O(n),肥肠开心 打了走人. 然后就开始颓了(逃 颓了一会之后看愤怒的小鸟这 ...
- 安装lnmp1.5到最后出现Error: MySQL install failed的解决方法
解决方法: mv /usr/bin/cmake /usr/bin/cmake.backup wget http://www.cmake.org/files/v3.0/cmake-3.0.2.tar.g ...
- Python 矩阵相关
Python 中矩阵运算主要使用numpy库.NumPy的主要对象是同种元素的多维数组.这是一个所有的元素都是一种类型.通过一个正整数索引的元素表格(通常是元素是数字).因此对于随机查找来说,比pyt ...
- sklearn调用分类算法的评价指标
sklearn分类算法的评价指标调用#二分类问题的算法评价指标import numpy as npimport matplotlib.pyplot as pltimport pandas as pdf ...
- PCA主成分分析算法的数学原理推导
PCA(Principal Component Analysis)主成分分析法的数学原理推导1.主成分分析法PCA的特点与作用如下:(1)是一种非监督学习的机器学习算法(2)主要用于数据的降维(3)通 ...
- NO17 第二关考试: 返回上次目录和ls -lrt倒序看文件--删除7天前的日志--查看日志更新--记录行号
第二题:不用cd /ildboy命令如何回到上一次的目录: 假如当前目录是: [root@localhost oldboy]# pwd/oldboy现在因为需要进入到了/tmp目录下进行操作,执行的命 ...