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,后面 ...
随机推荐
- 最常用的~正则表达式-相关js函数知识简洁分享【新手推荐】
一.正则表达式的创建 JS正则的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 varregObj =newRegExp("(^\s+)|(\s+ ...
- BADI FCODE(菜单) 增强
菜单增强功能只能用于非依赖于过滤器的一次性BADI(不是多用途的). 目前,菜单增强功能只能与程序增强功能(界面)一起创建. 定义一个没有过滤器的一次性增强 2.Classic Badi在FCODE ...
- php做APP接口开发,接口的安全性
1.当用户登录APP时,使用https协议调用后台相关接口,服务器端根据用户名和密码时生成一个access_key,并将access_key保存在session(或者保存在redis)中,将生成的ac ...
- Html5 编程题
1.请写出下面所示的控件的html 代码? <div> <div><a>姓名:</a><input type="text" ...
- C++ 类中的3种权限作用范围
三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 #include <iostream> #in ...
- hdu6195 cable cable cable
cable cable cable Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 模拟 URAL 1149 Sinus Dances
题目传送门 /* 模拟:找到规律分别输出就可以了,简单但是蛮有意思的 */ #include <cstdio> #include <algorithm> #include &l ...
- linux环境mxnet 安装
环境ubuntu 16.04 1.安装依赖项: sudo update && sudo apt-get install -y build-essential git libatlas- ...
- [ NOI 2002 ] 银河英雄传说
\(\\\) Description 有 \(n\) 列战场,每一列一开始只有一个战舰,编号就是对应的战场编号. 有 \(m\) 次操作: \(M_{i,j}\) :把 \(i\) 所在的一整列接在 ...
- [ Nowcoder Contest 167 #D ] 重蹈覆辙
\(\\\) \(Description\) 用\(1\times 2\)的矩形和面积为\(3\)的\(L\)形去覆盖一个\(2\times N\) 的矩形,求方案数对\(10^4+7\)取模后的结果 ...