HDU - 2852 树状数组查询第k大的数

第k大区间和问题的树状数组实现 问题描述:     给定一个整数序列a[1..N],定义sum[i][j]=a[i]+a[i+l]+……+a[j],将所有的sum[i][j]从小到大排序(其中i,j满足1 输入格式(ktm.in)     第一行有两个整数N,k,其中0     接下来N行每行一个整数。顺序给出序列a的元素。 输出格式(kth.out)                           sum序列 阅读详情

For the k-th number, we all should be very familiar with it. Of course,to kiki it is also simple. Now Kiki meets a very similar problem, kiki wants to design a container, the container is to support the three operations. 

Push: Push a given element e to container 

Pop: Pop element of a given e from container 

Query: Given two elements a and k, query the kth larger number which greater than a in container; 

Although Kiki is very intelligent, she can not think of how to do it, can you help her to solve this problem? 

Input

Input some groups of test data ,each test data the first number is an integer m (1 <= m <100000), means that the number of operation to do. The next m lines, each line will be an integer p at the beginning, p which has three values: 
If p is 0, then there will be an integer e (0 <e <100000), means press element e into Container. 

If p is 1, then there will be an integer e (0 <e <100000), indicated that delete the element e from the container   

If p is 2, then there will be two integers a and k (0 <a <100000, 0 <k <10000),means the inquiries, the element is greater than a, and the k-th larger number. 

Output

For each deletion, if you want to delete the element which does not exist, the output "No Elment!". For each query, output the suitable answers in line .if the number does not exist, the output "Not Find!".

Sample Input

5
0 5
1 2
0 6
2 3 2
2 8 1
7
0 2
0 2
0 4
2 1 1
2 1 2
2 1 3
2 1 4

Sample Output

No Elment!
6
Not Find!
2
2
4
Not Find!

树状数组可以用来记录比一个数小的数有几个,配合二分查找,就能在(logn)^2的时间复杂度下求得第k大的数

#include<cstdio>
#include<map>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const int num=100005;
int tree[num];
int mark[num];
int lowbit(int a)
{
    return a&-a;
}
void change(int a,int val)
{
    while(a<num){
        tree[a]+=val;
        a+=lowbit(a);
    }
}
int ask(int a)
{
    int sum=0;
    while(a>0){
        sum+=tree[a];
        a-=lowbit(a);
    }
    return sum;
}
int main()
{
    int n;
    while(scanf("%d",&n)!=-1){
        memset(tree,0,sizeof(tree));
        memset(mark,0,sizeof(mark));
        for(int i=0;i<n;i++){
            int ch;
            scanf("%d",&ch);
            if(ch==0){
                int a;
                scanf("%d",&a);
                change(a,1);
                mark[a]++;
            }
            else if(ch==1){
                int a;
                scanf("%d",&a);
                if(mark[a]==0){
                    printf("No Elment!\n");
                    continue;
                }
                change(a,-1);
                mark[a]--;
            }
            else if(ch==2){
                int a,b;
                scanf("%d %d",&a,&b);
                int exc=ask(a);
                if(ask(num-1)-exc<b){
                    printf("Not Find!\n");
                    continue;
                }
                int l=1,r=num-1;
                while(l<r){
                    int bet=(l+r)/2;
                    if(ask(bet)-exc<b)
                        l=bet+1;
                    else
                        r=bet;
                }
                printf("%d\n",r);
            }
        }
    }
    return 0;
}

 

L2-011 玩转二叉树 L2-011玩转二叉树(25分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。 输出格式: ... 阅读详情

相关推荐

ArcGIS+PLUS+InVEST三件套实战:从零搞定土地利用变化与碳储量预测(附完整数据包)

本文详细介绍了如何整合ArcGIS、PLUS模型和InVEST模型,构建土地利用变化与碳储量预测的完整研究流水线。通过多情景模拟和生态系统服务评估,提供从数据准备到结果验证的实战指南,助力研究者高效完成生态评估项目。

weixin_30399821的博客 543

树状数组:第K大值

转载勿喷,只为自己以后好找一点。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 原文:

u010839163的专栏 3191

Qt Location实战:5分钟搞定地图插件切换与卫星图源加载(附完整代码)

本文是Qt Location开发系列教程的实战指南,详细讲解如何在Qt应用中快速实现地图插件(如Esri、OSM、MapboxGL)的动态切换与卫星图源的加载。通过清晰的代码示例,帮助开发者理解插件机制,解决常见配置问题,并在5分钟内构建出具备交互式地图切换功能的应用程序。

kafka6courier的博客 524

HDU 2852 KiKi's K-Number 树状数组

KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1593    Accepted Submission(s): 677 Problem Description For the k-t

sky_fighting的专栏 2042

杭电计算机组成原理课程设计-实验七-寄存器堆设计实验

寄存器堆实验实验原理实验内容模块功能说明模块逻辑引脚图寄存器堆模块代码REG模块测试用例REG-ALU测试用例实验结果记录 寄存器堆实验结果及分析ALU_REG运算器模块实验结果及分析探索与思考 实验原理   32×32位的寄存器堆模块示意图如图所示,含有32个寄存器,每个寄存器32位。该寄存器堆具有A和B两个读端口,分别由 5 位的寄存器编号 R_Addr_A 和 R_Addr_B 来寻址 2 个寄存器,读出的数据则由 R_Data_A(32 位)和R_Data_B(32 位)输出。读访问时,没有使能或者

HDU-整蛊小子-⏰☂️/蚂蚁集团研发工程师 1万+

博科的SAN交换机基本操作

2、添加用户testuser赋予user权限可以访问1-128VF默认VF为128账号描述"Test user"密码为password123。1、创建zone别名(100是指当前设备Domain ID,1和2是指对应的index号)2,删除新接入设备的ZONE或保持ZONE配置一致。3、将zone添加到当前生效的CFG中。2、将zone添加到当前生效的CFG中。3、将zone添加到当前生效的CFG中。3,将添加的级联端口持续关闭。4、将当前zone生效。4、将当前zone生效。1、查看当前所有用户。

chenjunokok的博客 1837

求第K小/大的数(树状数组解法)

求第K小/大数这个题目经常出现,面试,考试以及OJ上都有类似的题目。 首先声明一点,个人觉得既然是第K小(大是一样的),那么重复的元素就不应该算了,当然如果算了就相对简单一些。。 最原始的解法,快排,然后取第K个数。或者是构建一个小顶堆,遍历数组取最小的K个数,再然后还有所谓的快速选择,有人证明了可以在O(n)时间内解决,不过我不太清楚这种算法是否对重复元素有效(但看了代码其实就是快排的一种应

xueerfei的专栏 7984

数字电路实验避坑指南:如何正确搭建主从JK触发器测试电路(附Proteus仿真)

本文详细解析了主从JK触发器的工作原理及实验搭建指南,重点解决了常见的Catching Problem现象,并提供了Proteus仿真优化方案。通过元器件选型、电路连接步骤和常见错误排查,帮助读者正确搭建测试电路,确保数字电路实验的稳定性和可靠性。

weixin_30790841的博客 469

权值线段树&树状数组实现求第k大&前驱&后继

题面 思路 这题其实是平衡树的板子…; 用树状数组做需要离线离散化处理; 首先增加删除一个数很容易,直接用树状数组的加一减一即可; 如果要查询数值xxx的排名 其实相当于问我们1到x-1有多少个数; 那么query后加一即可; 如果要查第kkk小的数,这个和往常的树状数组不同,要写一个新的函数; 有两种理解方式,一种是类似倍增LCA的想法; 另一种是反向求和; 比如说我们要131313 我们用二进制的思想去拼凑他,13=8+4+113=8+4+113=8+4+1 核心思想就是找到一个小于它但是最大

weixin_45724872的博客 1166

2026终极反反爬:Canvas/WebGL/字体指纹全维度伪装,应对浏览器检测实战指南

本文分享了2026年浏览器指纹检测现状及全维度伪装方案。当前反爬系统采用多维度联合指纹检测,重点针对硬件级(WebGL、Canvas)、系统级(字体、CPU)和行为级(鼠标移动)指纹。作者设计了一个独立的指纹伪装引擎,包含真实设备指纹库、指纹生成器和统一注入层,通过JS沙箱隔离实现伪装。核心方案包括:Canvas指纹通过真实设备渲染差异添加微偏移;WebGL指纹完整劫持上下文返回真实显卡参数;字体指纹劫持measureText方法模拟不同系统字体宽度。该方案实测可连续运行一个月零封号,解决了传统方法易被检测

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 924

MTK Android 12 Clone Project 克隆项目

本文介绍了如何使用MTK Android 12 Clone Project 克隆一个新的项目。通过使用绝对路径执行Perl脚本,并根据需要选择升级或降级位数,可以成功地生成一个新的项目并进行编译。希望本文对xdm有所帮助。

我其实什么都不会 942

查询比a大的数中的第k大的数 树状数组 hdu 2852 KiKi's K-Number

题目给定三种操作: 0 x 表示把x插入容器 ; 1 x 表示删除一个x如果没有x则输出 No Elment! ; 2 a k 表示比a大的数中的第k大的数 如果没有输出No Find!

ACM_10000h的专栏 739

Isaac Sim/Lab & ROS2 入门教程 —— 宇树人形机器人 H1 强化学习策略部署

本文介绍了如何通过ROS2和IsaacSim运行H1人形机器人的强化学习运动策略。主要内容包括:1)设置机器人关节配置和初始位置;2)添加IMU传感器;3)配置ROS2节点以发布观测数据和接收动作指令;4)创建模拟环境并发布ROS时钟;5)最终运行ROS2策略实现对机器人的键盘控制。文中详细说明了关节参数设置、传感器配置、ROS2节点创建等关键步骤,并提供了注意事项和验证方法。完成配置后,用户可通过键盘指令控制机器人在平坦地形上的运动。

2506_90492529的博客 2170

HDU 2852-KiKi's K-Number(树状数组)

HDU 2852-KiKi’s K-Number 题目原址 [http://acm.hdu.edu.cn/showproblem.php?pid=2852] 题意 要实现一种容器,可以向里面加入一个数字,弹出一个数字,查询在容器内第k个比a大的元素(这里可能会有误解,第一个比a大的元素应该是所有比a大的元素中最小的那个) 我们要用的就是权值树状数组,c[i]表示的是小于等于I的元素数量有多少个。...

terry的博客 319

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

引入 权值树状数组就是数组下标是数值的数组,数组存储下标对应的值有几个数 题目 HDU-2852 KiKi's K-Number 题意 几种操作,p=0代表push:将数值为a的数压入盒子 p=1代表pop,代表删除数值为e的数,如果没有这个数,输出No Elment! p=2代表query,查询比第k个比a大的元素,找不到输出Not Find! Sample Input 5 0 5 1...

weixin_30938149的博客 270

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

KiKi‘s K-Number HDU - 2852(树状数组+二分在整个数组里查找比x大的第k个数)

hdu2852 题解:我们的c[i]维护的是值为i的个数,每次我们查询值小于i的数的个数我们可以借用树状数组里查询前缀和的思想进行query(i)便可,之后我们就可以在树状数组上进行二分。 #include<bits/stdc++.h>//emuB167202003070038 using namespace std; typedef long long LL; const int maxn=1e5+10; int c[maxn]; int sum; void init() { for(

qq_41856950的博客 249

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

HDU 2852 树状数组+二分查询

http://acm.hdu.edu.cn/showproblem.php?pid=2852 For the k-th number, we all should be very familiar with it. Of course,to kiki it is also simple. Now Kiki meets a very similar problem, kiki wants to d...

xiji333的博客 350

hdu2852 KiKi's K-Number 树状数组+二分查找求第k大的数

For the k-th number, we all should be very familiar with it. Of course,to kiki it is also simple. Now Kiki meets a very similar problem, kiki wants to design a container, the container is to support t...

W349652743的博客 332

hdu 2852(树状数组+二分)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2852 KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2668    Accepted Submi

T_T 975

KiKi's K-Number (树状数组)

KiKi’s K-Number  (树状数组) HDU - 2852 题意: 题意:题目给定三种操作: 0 x 表示把x插入容器 ; 1 x 表示删除一个x如果没有x则输出 No Elment! ; 2 a k 表示比a大的数中的第k大的数 如果没有输出No Find! 思路: ​ 树状数组维护元素出现次数前缀和即可。操作0即修改;操作1先查询x是否存在,如果存在删除一个即可。操作2...

Dch19990825的博客 443

hdu2852(权值树状数组)

Problem Description For the k-th number, we all should be very familiar with it. Of course,to kiki it is also simple. Now Kiki meets a very similar problem, kiki wants to design a container, the cont...

MInNrz的Love&Share 443

hdu 2852 树状数组+二分

/* 题意:每次输入p,0表示插入e,1表示删除e,2表示找到数组中比a大的第k大的数 题解:树状数组+二分 用树状数组插入点,删除点以及求比a大的第k大的数,需要用二分进行加速,否则会超时; 用树状数组记录时通过记录点的个数,然后找到满足比a大的点x,sum(a+1~x)>=k即可 */ #include <cstdio> #include &l...

dianxie7120的博客 154

*HDU2852 树状数组(求第K小的数)

KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3864Accepted Submission(s): 1715 Problem Description For the k-th ...

anuancong1219的博客 194

HDU2852【树状数组+二分】

NO!

ONE MORE TRY 570

HDU 2852 KiKi's K-Number [树状数组+二分答案]【数据结构】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2852———————————————————–. KiKi’s K-NumberTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3865

Tabris的博客 462

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

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2852 题意:给三种操作, (1)加入一个数e; (2)删除一个数,如果这个数不存在,输出No Elment! (3)查询比a大的第k个数,如果这个数不存在,输出Not Find!,否则,输出这个数 思路:前两种操作都是树状数组的单点更新,最后一个操作相当于在一个单调不减的数组里查找第k个比a大的数,所...

qq_43423395的博客 192
上一篇: POJ - 3321 树状数组+dfs序
下一篇: 最小表示法 KMP 扩展KMP Manacher 模板
Chter0
博客等级 码龄8年 13粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值