题意:给定三个操作添加删除查询大于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的更多相关文章

  1. 权值树状数组 HDU-2852 KiKi's K-Number

    引入 权值树状数组就是数组下标是数值的数组,数组存储下标对应的值有几个数 题目 HDU-2852 KiKi's K-Number 题意 几种操作,p=0代表push:将数值为a的数压入盒子 p=1代表 ...

  2. 树状数组求第K小值 (spoj227 Ordering the Soldiers &amp;&amp; hdu2852 KiKi&#39;s K-Number)

    题目:http://www.spoj.com/problems/ORDERS/ and pid=2852">http://acm.hdu.edu.cn/showproblem.php? ...

  3. hdu2852 KiKi&#39;s K-Number

    Problem Description For the k-th number, we all should be very familiar with it. Of course,to kiki i ...

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

  5. 2019牛客网暑假多校训练第四场 K —number

    链接:https://ac.nowcoder.com/acm/contest/884/K来源:牛客网 题目描述 300iq loves numbers who are multiple of 300. ...

  6. hdu-2852 KiKi's K-Number---二分+树状数组

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2852 题目大意: 题意:    给出三种操作,    0 在容器中插入一个数.    1 在容器中删 ...

  7. 2019牛客暑期多校训练营(第四场)K.number

    >传送门< 题意:给你一个字符串s,求出其中能整除300的子串个数(子串要求是连续的,允许前面有0) 思路: >动态规划 记f[i][j]为右端点满足mod 300 = j的子串个数 ...

  8. 2019牛客暑期多校训练营(第四场) - K - number - dp

    https://ac.nowcoder.com/acm/contest/884/K 一开始整了好几个假算法,还好测了一下自己的样例过了. 考虑到300的倍数都是3的倍数+至少两个零(或者单独的0). ...

  9. 2019牛客多校第四场K number dp or 思维

    number 题意 给一个数字串,问有几个子串是300的倍数 分析 dp写法:这题一看就很dp,直接一个状态dp[i][j]在第i位的时候膜300的余数是j左过去即可.这题比赛的时候样例老是少1,后面 ...

随机推荐

  1. bzoj 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛【dp+树状数组+hash】

    最长上升子序列.虽然数据可以直接n方但是另写了个nlogn的 转移:f[i]=max(f[j]+1)(a[j]<a[i]) O(n^2) #include<iostream> #in ...

  2. CSS中路径及form表单的用法

    1.什么是路径? 路劲分为三种 1.绝对路径: 从盘符开始,然后依次的往下查找 本地: C:/Users/Administrator/Desktop/0527day01/07.html 服务器的: w ...

  3. git merge合并时遇上refusing to merge unrelated histories的解决方案

    如果git merge合并的时候出现refusing to merge unrelated histories的错误,原因是两个仓库不同而导致的,需要在后面加上--allow-unrelated-hi ...

  4. 全面学习ORACLE Scheduler特性(4)创建和管理Schedule

    三.使用Schedules 10g 中新推出的SCHEDULER可能确实会让很多初接触的朋友感觉晕头晕脑,相比之前的jobs,SCHEDULER中新增的概念太多.比如说jobs,仍然可以理解成之前版本 ...

  5. 299 Bulls and Cows 猜数字游戏

    你正在和你的朋友玩猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜.每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为”Bulls“, 公牛),有多少位数字 ...

  6. 242 Valid Anagram 有效的字母异位词

    给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词.例如,s = "anagram",t = "nagaram",返回 true ...

  7. working hard to be a professional coder

    1:read 2 : code 3 : 勤奋 4:技术栈 就前端主流技术框架的发展而言,过去的几年里发展极快,在填补原有技术框架空白和不足的同时也渐渐趋于成熟.未来前端在已经趋向成熟的技术方向上面将会 ...

  8. 手机页面操作栏的创建及WebFont的使用

    一.手机界面底部操作栏的创建. <style> .opers{ position:absolute; bottom:0px; left:0px; right:0px; height:3re ...

  9. [ SPOJ Qtree1 ] Query on a tree

    \(\\\) Description 给定 \(n\) 个点的树,边按输入顺序编号为\(1,2,...n-1\) . 现要求按顺序执行以下操作(共 \(m\) 次): \(CHANGE\ i\ t_i ...

  10. Django--1、MTV及基本应用

    web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,以避免重复造轮子. 所有的Web应用,本质上是一个socket服务 ...