HDU 2852 KiKi's K-Number【 树状数组 二分 】
题意:给出m个操作,
0:是增加一个数,add(x,1)
1:是删除一个指定的数,这个是看sum(x) - sum(x-1)是否为0,为0的话则不存在,不为0的话,则add(x,-1)
2:是查询比x大的数中第k大的数,
先求出比x小的个数s,假设比x大的数中第k大的数为y,
那么比y小的个数有s+k个
二分y的值来找
#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = (<<)-;
const int mod=;
const int maxn=; int a[maxn],c[maxn];
int k; int lowbit(int x){ return x &(-x);} int sum(int x){
int ret=;
while(x>){
ret+=c[x];x-=lowbit(x);
}
return ret;
} void add(int x,int d){
while(x<maxn){
c[x]+=d;x+=lowbit(x);
}
} int solve(int x){
int v=x;
int s=sum(x);
int kk=k+s;
int lb=,ub=maxn,mid; for(int i=;i<=;i++){
mid=(lb+ub)/;
if(sum(mid) < kk) lb =mid;
else ub = mid;
// printf("lb = %d ub = %d mid = %d\n",lb,ub,mid);
}
return ub;
} int main(){
int m;
while(scanf("%d",&m) != EOF){
memset(c,,sizeof(c));
while(m--){
int cmd;
scanf("%d",&cmd);
if(cmd == ){
int x;
scanf("%d",&x);
add(x,);
}
if(cmd == ){
int x;
scanf("%d",&x);
if(sum(x) - sum(x-) == ) printf("No Elment!\n");
else add(x,-);
}
if(cmd == ){
int x;
scanf("%d %d",&x,&k);
if(sum(maxn-) - sum(x) < k) printf("Not Find!\n");
else printf("%d\n",solve(x));
}
}
}
return ;
}
HDU 2852 KiKi's K-Number【 树状数组 二分 】的更多相关文章
- HDU 2852 KiKi's K-Number(离线+树状数组)
题目链接 省赛训练赛上一题,貌似不难啊.当初,没做出.离线+树状数组+二分. #include <cstdio> #include <cstring> #include < ...
- HDU 2852 KiKi's K-Number(树状数组+二分搜索)
题意:给出三种操作 0 e:将e放入容器中 1 e:将e从容器中删除,若不存在,则输出No Elment! 2 a k:搜索容器中比a大的第k个数,若不存在,则输出Not Find! 思路:树状数组+ ...
- HDUOJ-----2852 KiKi's K-Number(树状数组+二分)
KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- hdu 5869 区间不同GCD个数(树状数组)
Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- hdu 6203 ping ping ping(LCA+树状数组)
hdu 6203 ping ping ping(LCA+树状数组) 题意:给一棵树,有m条路径,问至少删除多少个点使得这些路径都不连通 \(1 <= n <= 1e4\) \(1 < ...
- TZOJ 4602 高桥和低桥(二分或树状数组+二分)
描述 有个脑筋急转弯是这样的:有距离很近的一高一低两座桥,两次洪水之后高桥被淹了两次,低桥却只被淹了一次,为什么?答案是:因为低桥太低了,第一次洪水退去之后水位依然在低桥之上,所以不算“淹了两次”.举 ...
- POJ 2182 Lost Cows 【树状数组+二分】
题目链接:http://poj.org/problem?id=2182 Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- 树状数组+二分||线段树 HDOJ 5493 Queue
题目传送门 题意:已知每个人的独一无二的身高以及排在他前面或者后面比他高的人数,问身高字典序最小的排法 分析:首先对身高从矮到高排序,那么可以知道每个人有多少人的身高比他高,那么取较小值(k[i], ...
- The Stream of Corning 2( 权值线段树/(树状数组+二分) )
题意: 有两种操作:1.在[l,r]上插入一条值为val的线段 2.问p位置上值第k小的线段的值(是否存在) 特别的,询问的时候l和p合起来是一个递增序列 1<=l,r<=1e9:1< ...
随机推荐
- CSS3中的2D和3D转换知识介绍
一 2D转换 转换是CSS3中具有颠覆性的特征之一,可以实现元素的位移.旋转.变形.缩放,甚至支持矩阵方式,配合即将学习的过渡和动画知识,可以取代大量之前只能靠Flash才可以实现的效果. 1.移动 ...
- BroadcastReceiver register 广播的动态注册方式
1.动态注册方式特点:在代码中进行注册后,当应用程序关闭后,就不再进行监听. 下面是具体的例子: BroadcastTest.java package com.czz.test; import and ...
- layer-list
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android=" ...
- UVa 11549 Open Credit System
题意:给出n个数,找出两个整数a[i],a[j](i < j),使得a[i] - a[j]尽量大 从小到大枚举j,在这个过程中维护a[i]的最大值 maxai晚于ans更新, 可以看这个例子 1 ...
- GFM(GitHub Flavored Markdown)与标准Markdown的语法区别
没有就自己造 其实这篇文16年底的时候就写好的,只不过当时是记在自己的笔记上(没错,我笔记大多记在本地,比发表的这寥寥几篇那是多的多的多了
- luogu p1004
P1004 题意 类似一个比较小的方格(N<=9),有的点是0,有的点有数, A->B的路径经过的点加上该点代表的数,求两次A->B的最大解(最优解) 一个令人恼的问题是两条路径如果 ...
- jQuery优化性能的十种方法
1,总是从ID选择器开始继承 例如: <div id="content"> <form method="post" action=" ...
- [置顶]
谷歌大牛 Jeff Dean 是如何成为互联网战神的
谷歌大牛 Jeff Dean 是如何成为互联网战神的 原文链接: Will Oremus 翻译: 伯乐在线- Lex Lian 译文链接: http://blog.jobbole.com/4772 ...
- H5-移动端适配
之前写H5页面也会遇到适配问题, 是通过媒体查询一点一点调整,始终觉得很繁琐,但一直也没去想想解决的办法. 今天专门花了一上午的时间来去研究. 小生只是刚踏入前端路的小白,对于网上各位大佬的讲解适配 ...
- [读书笔记] Python数据分析 (一) 准备工作
1. python中数据结构:矩阵,数组,数据框,通过关键列相互联系的多个表(SQL主键,外键),时间序列 2. python 解释型语言,程序员时间和CPU时间衡量,高频交易系统 3. 全局解释器锁 ...