题意:给定三个操作添加删除查询大于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. HTTP请求 响应状态码

      1.请求响应方式       get是从服务器上获取数据,post是向服务器传送数据.get 数据在地址栏中明文的形式发送, post则不是,传递的数据比get多 据RFC2616标准(现行的HT ...

  2. [App Store Connect帮助]六、测试 Beta 版本(2)输入测试信息以供外部测试

    如果您向外部测试员分发您的 App,您需要输入关于您 App 的额外 TestFlight 测试信息以供“Beta 版 App 审核”.您可以在添加 App 至您的帐户时,或在您邀请外部测试员时输入此 ...

  3. 网络爬虫之scrapy框架(CrawlSpider)

    一.简介 CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能之外,还派生了其自己独有的更强大的特性和功能.其中最显著的功能就是"LinkExtractor ...

  4. android序列化(2)Parcelable与Parcel

    1.简介 Parcel  : 包裹 Android采用这个它封装消息数据.这个是通过IBinder通信的消息的载体.需要明确的是Parcel用来存放数据的是内存(RAM),而不是永久性介质(Nand等 ...

  5. 9i 和 11 g 区别

    9i 和 11 g 区别 9i 不支持 2/4/8G,只支持 2000/4000/8000 M的

  6. oracle多语言环境下to_date时间转换问题

    现象:在多语言环境下使用过oracle的同学想必都遇到过这样一个问题, date_v date; date_v := to_date('2010/11/16');--或'2010/11/16' 同一个 ...

  7. C#模拟百度登录并到指定网站评论回帖(四)

    基本的实现功能前面已经全部讲完,基本上可以复制黏贴完成登录百度的过程了 今天的这一贴就说说怎么获取百度的验证码 内容回顾:还记得前面第一贴说的如果登录发生异常,百度会发回2个值吗?是的,就是codeT ...

  8. 关于定位中left和right,top和bottom的权重问题

    关于定位中left和right,top和bottom的权重问题 在共同类中设置了定位并且设置了left等定位,如果你引用这个类并加入其他的类中也有left和right等定位,那么你设置的right或是 ...

  9. Android RecyclerView嵌套EditView实时更新Item数据

    一.场景(例如:购物车) 1.当我们需要以列表样式管理某些数据时,可能需要列表项的某个字段可编辑 2.编辑Item上的某个字段后可能还要更新相关字段的值 二.可能遇到的问题 1.列表滑动导致输入框中的 ...

  10. 生成Nuget 源代码包来重用你的Asp.net MVC代码

    ASP.NET 开发人员有时会陷入一种困境:想要重用以前写过的东西,如一些具有完整功能的Web页面+后台逻辑, 往往不那么直接了当,因此很不爽.经常采用的方式是:找到以前写过的项目,从中挑出来一些有用 ...