hdu2852 KiKi's K-Number
题意:给定三个操作添加删除查询大于a的的第k大值----树状数组的逆向操作
给定a利用BIT查询有多少值比a小,这样比a大的k大值就应该有k+sum(a)个小于他的值
因此可以二分枚举k大值看看是不是满足条件。这里有一点需要注意,就是二分出答案时当前答案的的数量一定大于1因为这个wa了一次
详见代码:
1 #include <cstring>
2 #include <cstdio>
3 #include <algorithm>
4 using namespace std;
5 const int MAX = +;
6 const int inf = 0x3f3f3f3f;
7 int c[MAX],n,use[MAX];
8 int lowbit(int x)
9 {
return x&(-x);
}
void add(int x,int d)
{
for(int i=x;i<=MAX-;i+=lowbit(i))
{
c[i]+=d;
}
}
int sum(int x)
{
int ans=;
for(int i=x;i>=;i-=lowbit(i))
{
ans+=c[i];
}
return ans;
}
int solve(int a,int k)
{
if(sum(MAX-)-sum(a)<k) return ;
int i=sum(a),flag=,mid;
int low=a;
int high= MAX -;
while(low<=high)
{
mid=(low+high)>>;
int ans=sum(mid);
if(use[mid]&&ans-use[mid]<k+i&&ans>=k+i){flag=; break;}
else if(ans<k+i) low=mid+;
else high=mid-;
}
if(flag) return mid;
else return ;
}
int main()
{
int p,a,k;
while(scanf("%d",&n)>)
{
memset(use,,sizeof(use));
memset(c,,sizeof(c));
for(int i=;i<n;i++)
{
scanf("%d",&p);
if(!p)
{
scanf("%d",&a);
add(a,);
use[a]++;
}
else if(p==)
{
scanf("%d",&a);
if(use[a]<=) printf("No Elment!\n");
else
{
add(a,-);
use[a]--;
}
}
else
{
scanf("%d %d",&a,&k);
int ans=solve(a,k);
if(!ans) printf("Not Find!\n");
else printf("%d\n",ans);
}
}
}
return ;
81 }
hdu2852 KiKi's K-Number的更多相关文章
- 权值树状数组 HDU-2852 KiKi's K-Number
引入 权值树状数组就是数组下标是数值的数组,数组存储下标对应的值有几个数 题目 HDU-2852 KiKi's K-Number 题意 几种操作,p=0代表push:将数值为a的数压入盒子 p=1代表 ...
- 树状数组求第K小值 (spoj227 Ordering the Soldiers && hdu2852 KiKi's K-Number)
题目:http://www.spoj.com/problems/ORDERS/ and pid=2852">http://acm.hdu.edu.cn/showproblem.php? ...
- hdu2852 KiKi's K-Number
Problem Description For the k-th number, we all should be very familiar with it. Of course,to kiki i ...
- hdu2852 KiKi's K-Number
Problem Description For the k-th number, we all should be very familiar with it. Of course,to kiki i ...
- 2019牛客网暑假多校训练第四场 K —number
链接:https://ac.nowcoder.com/acm/contest/884/K来源:牛客网 题目描述 300iq loves numbers who are multiple of 300. ...
- hdu-2852 KiKi's K-Number---二分+树状数组
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2852 题目大意: 题意: 给出三种操作, 0 在容器中插入一个数. 1 在容器中删 ...
- 2019牛客暑期多校训练营(第四场)K.number
>传送门< 题意:给你一个字符串s,求出其中能整除300的子串个数(子串要求是连续的,允许前面有0) 思路: >动态规划 记f[i][j]为右端点满足mod 300 = j的子串个数 ...
- 2019牛客暑期多校训练营(第四场) - K - number - dp
https://ac.nowcoder.com/acm/contest/884/K 一开始整了好几个假算法,还好测了一下自己的样例过了. 考虑到300的倍数都是3的倍数+至少两个零(或者单独的0). ...
- 2019牛客多校第四场K number dp or 思维
number 题意 给一个数字串,问有几个子串是300的倍数 分析 dp写法:这题一看就很dp,直接一个状态dp[i][j]在第i位的时候膜300的余数是j左过去即可.这题比赛的时候样例老是少1,后面 ...
随机推荐
- AtCoder Regular Contest 099 C~E
C - Minimization 枚举就可以了 因为最后一定会变成1,所以第一次操作的区间就包含1会比较优,然后枚举1在第一次操作区间里排第几个取min即可 #include<iostream& ...
- jQuery setInterval倒计时精确到毫秒
效果类似于:购物抢购倒计时-->在跳转N多个页面之后,倒计时间仍然正常显示. 思路: 结束时间是固定不变的(endTime),一直在改变的是当下的时间(curTime = new date()) ...
- 微信小程序setData的使用,通过[...]进行动态key赋值
首先先介绍一下微信小程序Page.prototype.setData(Object data, Function callback)的讲解: setData函数用于将数据从逻辑层发送到视图层(异步), ...
- css 实现 checkbox 大小调整
一般调整 checkbox 大小我们想到的是 width.height,可是设置后,发现是没有效的. 如微信小程序里面,checkbox 默认就很大,想设置小一点怎么办? transform: sca ...
- Asp.Net 开发实战技术
1.什么是WMI技术 WMI是一项核心的Windows管理技术,WMI作为一种规范和基础结构,通过它可以访问.配置.管理和监视几乎所有的Windows资源,比如用户可以在远程计算机器上启动一个进程:设 ...
- 6.13---shiro
- java实现麦克风自动录音
最近在研究语音识别,使用百度的sdk.发现只有识别的部分,而我需要保存音频文件,并且实现当有声音传入时自动生成音频文件. 先上代码: public class EngineeCore { String ...
- 关于使用 autoFac 的注入方法
1.使用 NUGET 安装 Autofac 2.需要引用Autofac ASP.NET MVC 5 Integration 这个扩展包. 但有时候在NuGet中找不到 该包 需要使用“程序要控制器控 ...
- 自学php【一】 任务:图片上传即时可见
工作已经快2周了,头儿给派了个任务做个企业站!这几天正在紧锣密鼓的作战中!等忙完了这个活!写下自己的学习心得体会!与看到文章的您一起分享! 在这里记录每次遇到的难题,如何解决的! 今天要做的功能就是实 ...
- Java 基础入门随笔(9) JavaSE版——文档注释
上节中写了一些static变量以及静态的方法的定义使用以及与非静态的差别,这节补充下: 如果在一个类中所有方法都为静态的,且无成员变量,这时候需要对对应的类进行限制该类无法创建对象,具体操作如下: p ...