HDU 2852 KiKi's K-Number(树状数组+二分搜索)
题意:给出三种操作
0 e:将e放入容器中
1 e:将e从容器中删除,若不存在,则输出No Elment!
2 a k:搜索容器中比a大的第k个数,若不存在,则输出Not Find!
思路:树状数组+二分搜索,具体见代码吧。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
/*
AC
树状数组+二分搜索
题意:给出三种操作
0 e:将e放入容器中
1 e:将e从容器中删除,若不存在,则输出No Elment!
2 a k:搜索容器中比a大的第k个数,若不存在,则输出Not Find! 思路:树状数组+二分搜索,具体见代码吧。
*/
using namespace std;
const int maxn=;
int m;
int c[maxn]; //树状数组
int vis[maxn]; //vis[i]表示元素i的个数 int lowbit(int x){
return x&(-x);
} void update(int i,int v){
while(i<maxn){
c[i]+=v;
i+=lowbit(i);
}
} //sum(i)表示容器中元素大小在1~i之间的个数
int sum(int i){
int res=;
while(i){
res+=c[i];
i-=lowbit(i);
}
return res;
} //二分搜索整个序列中第k大的数
int binarySearch(int k){
int l=,r=maxn-,mid,tmp;
while(r-l>){
mid=(l+r)>>;
tmp=sum(mid);
if(k<=tmp)
r=mid;
else
l=mid;
}
return r;
}
int main()
{
int op,e,k;
int n; //目前存放的元素个数
while(scanf("%d",&m)!=EOF){
memset(vis,,sizeof(vis));
memset(c,,sizeof(c));
n=;
for(int i=;i<=m;i++){
scanf("%d",&op);
if(op==){
scanf("%d",&e);
vis[e]++;
update(e,);
n++;
}
else if(op==){
scanf("%d",&e);
if(!vis[e])
printf("No Elment!\n");
else{
vis[e]--;
update(e,-);
n--;
}
}
else{
scanf("%d%d",&e,&k);
int t=sum(e); // 目前<=e的元素有t个,转化成搜索第t+k个大的元素
//若t+k直接大于n,则不存在该元素
if(t+k>n)
printf("Not Find!\n");
else{
k=k+t;
printf("%d\n",binarySearch(k));
}
}
}
}
return ;
}
HDU 2852 KiKi's K-Number(树状数组+二分搜索)的更多相关文章
- HDU 2852 KiKi's K-Number(离线+树状数组)
题目链接 省赛训练赛上一题,貌似不难啊.当初,没做出.离线+树状数组+二分. #include <cstdio> #include <cstring> #include < ...
- 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大的数 ...
- 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 < ...
- HDU 1394 Minimum Inversion Number ( 树状数组求逆序数 )
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 Minimum Inversion Number ...
- hdu 2852 KiKi's K-Number (线段树)
版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 2852 题意: 一个容器,三种操作: (1) 加入一个数 e (2) 删除一个数 e,如果不存在则输出 No Elment! (3) 查 ...
- HDU 1394 Minimum Inversion Number (树状数组求逆序对)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题目让你求一个数组,这个数组可以不断把最前面的元素移到最后,让你求其中某个数组中的逆序对最小是多 ...
- HDU 1394 Minimum Inversion Number (树状数组 && 规律 && 逆序数)
题意 : 有一个n个数的数列且元素都是0~n-1,问你将数列的其中某一个数及其前面的数全部置到后面这种操作中(比如3 2 1 0中选择第二个数倒置就产生1 0 3 2)能产生的最少的逆序数对是多少? ...
- 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 ...
随机推荐
- mysql外键设置(待测试)
外键的定义语法:[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col ...
- "大账户"时代
当要下载某文件时,哪怕是免积分,也需要登陆账户才能下载. 当要浏览某论坛时,只有注册账户,才可以浏览帖子. 当要网购商品时,必须注册账户,还要有众多宝宝平台,才可以实现交易. 当要团购时,必须先 ...
- Windows Phone自定义控件 ProgressRing
前言 Windows Phone为开发者提供了很多原生控件,但在很多场景下我们需要对默认的功能或样式做一定的修改才能满足我们的需求,自定义控件应运而生.本文通过以自定义控件进度环(ProgressRi ...
- oracle12c不能进入到http://localhost:5500/em的解决办法
Oracle11g企业管理器无法打开——解决https://localhost:1158/em 页面无法打开的问题 常见的问题:https://localhost:1158/em 无法打开 解决办法: ...
- golang的序列与反序列化
golang写backend之类的应用,还是挺方便的...使用encoding/json包时, 必须注意, 在struct定义的属性必须是exported, 否则不会设置值. 例如:type DRol ...
- linux打开端口
客户那边有台服务器同一个局域网中都无法访问,排除lamp环境问题,发现时服务器中的防火墙没有开启80端口.于是去网上搜索了一下,在脚本之家看到一种添加代码的方法 代码如下 复制代码 vi /etc/ ...
- MongoDB 数据类型
MongoDB支持许多数据类型的列表下面给出: String : 这是最常用的数据类型来存储数据.在MongoDB中的字符串必须是有效的UTF-8. Integer : 这种类型是用来存储一个数值.整 ...
- mysql TRUNCATE
保留小数点 select truncate(field1,2) from table1 field3 字段类型为decimal(20,3)
- 高德地图JavaScript API开发研究
高德地图JavaScript API是一套用JavaScript 语言编写的应用程序接口,可以通过各种API接口向地图添加内容,创建功能丰富.交互性强的地图应用.高德地图JavaScript API ...
- run.do 文件编写说明
#停止仿真quit -sim#清除信息.main clear #建立物理路径libvlib ./lib/#建立物理路径work_avlib ./lib/work_a/#映射逻辑库至物理路径vmap b ...