先补充从n个数中求第k小数的理论知识。。。。。。。。

睡觉去~

------------------------------------------又要睡觉的分割线------------------------------------------

HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2852

题目大意,给定三种操作:

0  a代表插入一个数

1  a代表删除掉a这个数

2 a k 查询比a大的第k个数

跟着大神走~树状数组+二分

树状数组更新的求和的时间都只要log(n)

#include<cstdio>
#include<cstring>
const int MAXN=100000+10;
int data[MAXN]; //设置data为统计比该下标小的元素个数 inline int lowbit(int x)
{
return x&(-x);
} int sum(int x)
{
int res=0;
while(x>0)
{
res+=data[x];
x-=lowbit(x);
}
return res;
} void add(int id,int t)
{
while(id < MAXN)
{
data[id]+=t;
id+=lowbit(id);
}
} void findk(int x,int k) // >=x kth number
{
int L=x+1;
int R=MAXN; int cur_sum=sum(x);
while(L<R)
{
int mid=(L+R)>>1; //这里并不会越界
int mid_sum=sum(mid); if(mid_sum - cur_sum < k)
L=mid+1;
else
R=mid; } if(L==MAXN)
printf("Not Find!\n");
else
printf("%d\n",L); } int main()
{
int T;
while(~scanf("%d",&T))
{
memset(data,0,sizeof(data)); while(T--)
{
int action,temp;
scanf("%d%d",&action,&temp);
if(action==0) //push
{
add(temp,1);
}
else if(action==1) //pop
{
if(sum(temp)==sum(temp-1))
printf("No Elment!\n");
else
add(temp,-1);
}
else if(action==2) //query
{
int k;
scanf("%d",&k);
findk(temp,k);
} } }
return 0;
}

HDU 2852 KiKi's K-Number 树状数组的更多相关文章

  1. HDU 2852 KiKi's K-Number(树状数组+二分搜索)

    题意:给出三种操作 0 e:将e放入容器中 1 e:将e从容器中删除,若不存在,则输出No Elment! 2 a k:搜索容器中比a大的第k个数,若不存在,则输出Not Find! 思路:树状数组+ ...

  2. HDU 2852 KiKi's K-Number(离线+树状数组)

    题目链接 省赛训练赛上一题,貌似不难啊.当初,没做出.离线+树状数组+二分. #include <cstdio> #include <cstring> #include < ...

  3. 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大的数 ...

  4. hdu 5869 区间不同GCD个数(树状数组)

    Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  5. hdu 6203 ping ping ping(LCA+树状数组)

    hdu 6203 ping ping ping(LCA+树状数组) 题意:给一棵树,有m条路径,问至少删除多少个点使得这些路径都不连通 \(1 <= n <= 1e4\) \(1 < ...

  6. HDU 1394 Minimum Inversion Number ( 树状数组求逆序数 )

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 Minimum Inversion Number                         ...

  7. hdu 2852 KiKi's K-Number (线段树)

    版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 2852 题意: 一个容器,三种操作: (1) 加入一个数 e (2) 删除一个数 e,如果不存在则输出 No Elment! (3) 查 ...

  8. HDU 1394 Minimum Inversion Number (树状数组求逆序对)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题目让你求一个数组,这个数组可以不断把最前面的元素移到最后,让你求其中某个数组中的逆序对最小是多 ...

  9. HDU 1394 Minimum Inversion Number (树状数组 && 规律 && 逆序数)

    题意 : 有一个n个数的数列且元素都是0~n-1,问你将数列的其中某一个数及其前面的数全部置到后面这种操作中(比如3 2 1 0中选择第二个数倒置就产生1 0 3 2)能产生的最少的逆序数对是多少? ...

  10. 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 ...

随机推荐

  1. 注意string的insert函数的几种形式

    string (1) string& insert (size_t pos, const string& str); substring (2) string& insert ...

  2. Mac使用Docker-machine訪问docker publish port

    Step 1.Export the port in your container(docker-machine or boot2docker) 首先,要保证你公布port的image已经run起来了. ...

  3. 【直接拿来用のandroid公共代码模块解析与分享】の Notification和NotificationManager

    本文源代码托管在https://github.com/ASCE1885/asce-common,欢迎fork Android项目做得多了.会发现原来非常多基础的东西都是能够复用,这个系列介绍一些自己项 ...

  4. oracle跨数据库跨用户訪问注意事项

    java代码中不同意出现oracle的username.数据链路名. 跨用户.跨数据库的訪问必须在oracle中建同义词或视图来实现.在java代码中仅仅需当做当前用户下的对象处理.

  5. Android开发经验之在图片上随意点击移动文字

    只要在图片范围之内,文字可随意点击移动. package xiaosi.GetTextImage; import android.content.Context; import android.con ...

  6. vue ---webpack 打包上线

     先来描述一下期间遇到的问题有哪些: 1.打包后将 dist 文件夹和 index.html 放到 tomcat,在浏览器中访问时,出现空白页,f12 提示 404. 2.打包好的静态资源均是绝对路径 ...

  7. 56.fread fwrite

    fwrite //初始化数组 ]; ; i < ;i++) { printf("\n%d", a[i] = i); } //以写的方式打开文件 FILE *pf = fope ...

  8. SQL数值转字符串保留指定小数位

    IF EXISTS ( SELECT * FROM sysobjects WHERE xtype = 'fn' AND name = 'fn_NumberFormat' ) BEGIN DROP FU ...

  9. 洛谷P3954 成绩【民间数据】

    题目背景 数据已修复 题目描述 牛牛最近学习了C++入门课程,这门课程的总成绩计算方法是: 总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50% 牛牛想知道,这门课程自己最终能得到多少分. ...

  10. c#的中英文混合字符串截取

    public class StringHelper     {         public static string GetSubString(string str, int len)       ...