hdu 2852 KiKi's K-Number (线段树)
版权声明:本文为博主原创文章,未经博主允许不得转载。
题意:
一个容器,三种操作:
(1) 加入一个数 e
(2) 删除一个数 e,如果不存在则输出 No Elment!
(3) 查询比a大的数中的第k小数,不存在就输出 Not Find!
解法:
关于第三点,可以先查询小于等于a的数的个数cnt,然后直接查询第cnt+k小数就行了 。
二分+树状数组 或者 主席树(有点杀鸡用牛刀的感觉 。。。) 也是可以做的 _(:з」∠)_
code:线段树
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <cmath>
- #include <cstring>
- #include <queue>
- #include <set>
- #include <vector>
- #include <map>
- #define ll long long
- using namespace std;
- const int N=1e5+;
- int L[N*],R[N*],cnt[N*];
- inline void bulidtree(int l,int r,int k){
- L[k]=l; R[k]=r;
- cnt[k]=;
- if (l==r) return;
- int mid=(l+r)>>;
- bulidtree(l,mid,k<<);
- bulidtree(mid+,r,(k<<)|);
- }
- inline void update(int p,int d,int k){
- cnt[k]+=d;
- if (L[k]==R[k]) return;
- int mid=(L[k]+R[k])>>;
- if (p<=mid) update(p,d,k<<);
- else update(p,d,(k<<)|);
- }
- inline int query(int x,int y,int k){
- if (L[k]==x && R[k]==y)
- return cnt[k];
- int mid=(L[k]+R[k])>>;
- if (y<=mid) return query(x,y,k<<);
- else if (x>mid) return query(x,y,(k<<)|);
- else return query(x,mid,k<<)+query(mid+,y,(k<<)|);
- }
- inline int find(int x,int k){
- if (cnt[k]<x) return -;
- while (L[k]!=R[k]){
- if (x<=cnt[k<<]) k=k<<;
- else {
- x-=cnt[k<<];
- k=(k<<)|;
- }
- }
- return L[k];
- }
- int main(){
- int m;
- while (~scanf("%d",&m)){
- int p,x,y;
- bulidtree(,N-,);
- while (m--){
- scanf("%d",&p);
- switch(p){
- case :
- scanf("%d",&x);
- update(x,,);
- break;
- case :
- scanf("%d",&x);
- if (query(x,x,)) update(x,-,);
- else puts("No Elment!");
- break;
- case :
- scanf("%d%d",&x,&y);
- int ans=find(query(,x,)+y,);
- if (~ans) printf("%d\n",ans);
- else puts("Not Find!");
- break;
- }
- }
- }
- return ;
- }
hdu 2852 KiKi's K-Number (线段树)的更多相关文章
- HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)
HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...
- hdu 5274 Dylans loves tree(LCA + 线段树)
Dylans loves tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- HDU 3074.Multiply game-区间乘法-线段树(单点更新、区间查询),上推标记取模
Multiply game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- hdu - 1394 Minimum Inversion Number(线段树水题)
http://acm.hdu.edu.cn/showproblem.php?pid=1394 很基础的线段树. 先查询在更新,如果后面的数比前面的数小肯定会查询到前面已经更新过的值,这时候返回的sum ...
- K-th Number 线段树的区间第K大
http://poj.org/problem?id=2104 由于这题的时间限制不紧,所以用线段树水一水. 每个节点保存的是一个数组. 就是对应区间排好序的数组. 建树的时间复杂度需要nlogn 然后 ...
- HDU 1394 Minimum Inversion Number(线段树 或 树状数组)
题目大意:给出从 0 到 n-1 的整数序列,A0,A1,A2...An-1.可将该序列的前m( 0 <= m < n )个数移到后面去,组成其他的序列,例如当 m=2 时,得到序列 A2 ...
- HDU - 6521 Party (SYSU校赛K题)(线段树)
题目链接 题意:n个人排成一列,一开始他们互不认识,每次选[l,r]上的人开party,使他们互相认识,求出每次party之后新互相认识的人的对数. 思路:把“互相认识”变成单向连边,只考虑左边的人对 ...
- HDU 1394:Minimum Inversion Number(树状数组,线段树)[水]
题意:有0~n-1这n个数,以一定的排列.这个排列可以循环,就是可以把第一个拿到最后,然后形成新的排列.问这些排列中的逆序对最小值. 思路: 最后的循环,拿走一个之后,新的逆序对数 newsum = ...
- hdu 13394 Minimum Inversion Number 线段树
题意: 首先给你一个长度为n的序列v,你需要首先找出来逆序对(i<j && v[i]>v[j]) 然后把这个序列的最后一个元素放在第一个位置上,其他元素都向后移动一位. 一 ...
随机推荐
- BZOJ 2424 订货(贪心+单调队列)
怎么题解都是用费用流做的啊...用单调队列多优美啊. 题意:某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初 ...
- 使用Runtime.getRuntime().exec()方法的几个陷阱
Process 子类的一个实例,该实例可用来控制进程并获得相关信息.Process 类提供了执行从进程输入.执行输出到进程.等待进程完成.检查进程的退出状态以及销毁(杀掉)进程的方法. 创建进程的方法 ...
- 题解 P1308 【统计单词数】
小金羊发一篇不一样的题解: 这个题解不是讲解法的,是讲算法的... 众所周知,string在中被定义为是类型, 这意味着我们可以将它作为int一样的类型使用. 并且还有神奇的加减法: string s ...
- java中初始化块、静态初始化块和构造方法
(所谓的初始化方法init()是另一回事, 在构造方法之后执行, 注意不要混淆) 在Java中,有两种初始化块:静态初始化块和非静态初始化块.它们都是定义在类中,用大括号{}括起来,静态代码块在大括号 ...
- 行列式(二):余子式&代数余子式
目录 按行列展开 \(\Delta\)以下内容主要为<线性代数>的学习笔记 按行列展开 一般来说,低阶行列式的计算比高阶行列式的计算要简单得多,因此考虑用低阶行列式来表示高阶行列式.为此, ...
- Win10如何搭建FTP服务器以实现快速传输文件
原文链接地址:http://blog.csdn.net/bai_langtao/article/details/77751447 Win10如何搭建FTP服务器以实现快速传输文件?相信大家在工作或生活 ...
- 网站统计IP PV UV实现原理
网站流量统计可以帮助我们分析网站的访问和广告来访等数据,里面包含很多数据的,比如访问试用的系统,浏览器,ip归属地,访问时间,搜索引擎来源,广告效果等.原来是一样的,这次先实现了PV,UV,IP三个重 ...
- linux设置开机自动启动
有很多中方法,这里只取最简单的一种: 把启动命令放到/etc/rc.d/rc.local文件里这样就可以每次启动的时候自动启动服务了, 注意给rc.local执行权限
- bzoj2006: [NOI2010]超级钢琴(堆+RMQ)
和上一道题同类型...都是用堆求第k大 考虑对于每一个r,怎么求出一个最优的l.显然只需要求出前缀和,用RMQ查询前面最小的l的前缀和就好了.但是对于一个r,每个l只能选一次,选了一次之后,考虑怎么把 ...
- 2018-2019 ACM-ICPC 徐州区域赛 部分题解
题目链接:2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest A. Rikka with Minimum Spanning Trees 题意: 给出一个随 ...