hdu 5249 KPI (动态中位数,两个set)

Leetcode 480. 滑动窗口中位数 (滑动窗口维护中位数,使用两个multiset替代对顶堆) 思路是动态维护对顶堆,使用multiset代替堆,避免手动实现堆的删除。 class Solution { public: double find_median(multiset<int> &min, multiset<int> &max, int k){ if(k%2==0){ return ((double)*max.rbegin()+*min.begin())/2; }else{ .. 阅读详情

解析:

题意要求动态的求中位数,参考别人的方法是先开两个优先队列。
以及利用一个队列来模拟管道。
然后左边升序,右边降序,右边个数-左边个数>=1,然后右边询问的时候直接输出右边最小的,然后看看是左边还是右边的,把对应的那边的个数-1,如果发现(右边个数-左边个数>=1)这个条件不满足了,那么就权衡下,两个队列里面的元素处理下(左给右或者右给左),总的时间复杂度与数据无关,是O(n*log(n))。

AC代码:

#include <cstdio>
#include <cstring>
#include <set>
#include <queue>
using namespace std;
set<int> stL, stR;
set<int>::iterator it;
queue<int> que;

char cmd[10];
int q;

void modify() {
    int dis = stL.size() - stR.size();
    if(dis == 0 || dis == 1) return ;
    if(dis == -1) { //右边比左边多一个,右边移动一个到左边
        it = stR.begin();
        stL.insert(*it);
        stR.erase(it);
    }else if(dis == 2) { //左边多两个,左边移动一个到右边
        it = stL.end(); it--;
        stR.insert(*it);
        stL.erase(it);
    }
}

void pushVal(int x) {
    que.push(x);
    if(stL.size() == 0) {
        stL.insert(x);
    }
    it = stL.end();
    it--;
    if(x <= *it) stL.insert(x);
    else stR.insert(x);
    modify();
}

void popVal() {
    int front = que.front();
    que.pop();
    it = stL.end(), it--;
    int last = *it;
    if(front <= last) {
        it = stL.find(front);
        stL.erase(it);
    }else {
        it = stR.find(front);
        stR.erase(it);
    }
    modify();
}

void query() {
    int tot = stL.size() + stR.size();
    if(tot & 1) {
        it = stL.end(); it--;
    }else {
        it = stR.begin();
    }
    printf("%d\n", *it);
}

int main() {
    int cas = 1;
    while(scanf("%d", &q) != EOF) {
        stL.clear(), stR.clear();
        while(!que.empty()) que.pop();
        printf("Case #%d:\n", cas++);
        int x;
        while(q--) {
            scanf("%s", cmd);
            if(cmd[0] == 'i') {
                scanf("%d", &x);
                pushVal(x);
            }else if(cmd[0] == 'o') {
                popVal();
            }else if(cmd[0] == 'q') {
                query();
            }
        }
    }
    return 0;
}
hdu5249---KPI(二分+树状数组) Problem Description 你工作以后, KPI 就是你的全部了. 我开发了一个服务,取得了很大的知名度。数十亿的请求被推到一个大管道后同时服务从管头拉取请求。让我们来定义每个请求都有一个重要值。我的KPI是由当前管道内请求的重要值的中间值来计算。现在给你服务记录,有时我想知道当前管道内请求的重要值得中间值。Input 有大约100组数据。每组数据第一行有一个n(1≤n≤10000) 阅读详情

相关推荐

STM32F103C8T6 驱动2位共阳数码管(基于 74HC595 和 PNP 三极管)

整体设计思路是通过 STM32F103C8T6 控制 74HC595 和 PNP 三极管,实现共阳数码管的显示功能。最初的电路设计中,三极管发射极接 5V 电源,这导致了数码管两位显示相同数字的问题。数码管能够稳定显示 0-99的数字。

qq_40289410的博客 2214

hdu5249KPI动态中位数(两个set)

题意(中问题直接粘题意吧)                                                                       KPI Problem Description 你工作以后, KPI 就是你的全部了. 我开发了一个服务,取得了很大的知名度。数十亿的请求被推到一个大管道后同时服务从管头拉取请求。让我们来定义每个请求都有一个重要值。

天使也掉毛 958

解决/usr/lib64/libstdc++.so.6和/lib64/libc.so.6版本过低问题

在CentOS7.0中编译好MySQL5.7.14之后,然后在CentOS6.5中初始化MySQL,执行:/usr/local/mysql/bin/mysqld --version出现如下问题:./bin/mysqld: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./bin/mysqld)

poxiaonie的博客 2万+

7-53 两个有序序列的中位数 (25 分)(思路加详解)用STL容器中的set容器的自动去重过不去

一:题目 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A 0 ​ ,A 1 ​ ,⋯,A N−1 ​ 的中位数指A (N−1)/2 ​ 的值,即第⌊(N+1)/2⌋个数(A 0 ​ 为第1个数)。 输入格式: 输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。 输出格式: 在一行中输出两个输入序列的并集序列的中位数。 输入样例1: 5 1 3 5 7 9 2 3 4 5 6 输出

qq_48508278的博客 477

主流 AI 插件 之一的 Copilot 介绍

Copilot 是微软推出的一款人工智能助手,旨在通过自然语言交互帮助您提升工作效率和创造力,覆盖多平台,提供智能问答、内容生成、代码辅助等功能。其核心定位为“日常 AI 伴侣”,旨在通过自然语言交互提升工作与生活效率。

u014695938的博客 6900

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月12日-生产期间维护用的双重隔离

生产期间维护用的双重隔离。该程序用于准备将一个或多个双工位设置为维护状态,同时SABRE 3D/3DxT/3D Scimitar保持生产运行。其目的是在不中断生产的情况下将双工位与运行中的设备隔离。

weixin_46735260的博客 574

[POI2008]砖块Klo(set维护中位数)

[POI2008]砖块Klo Description NNN柱砖,希望有连续KKK柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另一柱.仓库无限大. 现在希望用最小次数的动作完成任务. Input 第一行给出NNN,KKK.(1≤k≤n≤100000)(1≤k≤n≤100000)(1 ≤ k ≤ n ≤ 100...

lvmaooi的博客 659

树莓派c语言串口通讯程序

在网上搜了很多关于树莓派串口通讯的例子,但是都是用python写的,虽然python很有名,而且最近也在学习这门语言, 但是还是想用c语言实现一下,因为需要用到整套系统里,其他内容都是用c语言写的。但是网上没有找打现成的。 还好,之前做过天嵌2440开发板的串口程序(参照天嵌工程师提供的代码),发现串口程序其实是通用的, 驱动层屏蔽了硬件细节,个人猜测,几乎所有移植好的系统的串口,都可以用一

realank的专栏 1万+

在线求中位数(set)实现 TOJ3515

1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <set> 5 6 using namespace std; 7 8 multiset<int> smin; 9 multise...

weixin_30242907的博客 559

嵌入式系统(一):鸿蒙系统

本文为期末复习笔记,内容仅供参考???? 鸿蒙系统是一款面向万物互联时代的、全新的分布式操作系统 鸿蒙提出了基于同一套系统能力、适配多种终端形态的分布式理念 提供全场景(移动办公、运动健康、社交通信、指挥出行、媒体娱乐等)业务能力 华为是OpenHarmony开源项目的共建者、也是共享者之一 鸿蒙技术特性 分布式设计 一次开发,多端部署 系统与硬件解耦,弹性部署 三大分布式能力 分布式软总线 设备间互联互通提供分布式通信能力 从手动发现,进化成自发现 传输高带宽关键技术-极简协议 分布式数据管

weixin_45608532的博客 4308

PX4从放弃到精通(二十二):日志

文章目录前言一、下载日志二、ulog转CSV三、利用flightplot软件分析PX4的ulog日志1 windos安装2 ubuntu18.04安装四、使用PlotJuggler分析PX4日志五、设置日志记录条件六、添加自定义日志消息 前言 PX4 1.10以上固件 QGC 一、下载日志 将飞控链接地面站,在下图页面点击“刷新”,即可看到保存的日志(前提是要有TF卡) 选择需要下载的日志,点击右侧的“下载”,然后选择目录即可进行下载,如果想擦除所有的日志,可以点击右侧的“擦除全部” 二、ulog转CS

超维空间科技的博客 6796

无序数组的中位数(set+deque)hdu5249

KPI Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 901Accepted Submission(s): 398 Problem Description 你工作以后, KPI 就是你的全部了. 我开发了一个服务,取得了很大...

weixin_30352645的博客 142

华为昇腾开发——多模型资源管理(C++)

在使用Ascend ACL(Ascend Computing Language)的ACLLite库进行多模型推理时,合理的资源管理至关重要。

如果想成为中心,那么就到中心去吧。 577

hdu 5249(set + queue)

题意: Input 有大约100组数据。每组数据第一行有一个n(1≤n≤10000),代表服务记录数。接下来有n行,每一行有3种形式 “in x”: 代表重要值为x(0≤x≤109)的请求被推进管道。 “out”: 代表服务拉取了管道头部的请求。 “query: 代表我想知道当前管道内请求重要值的中间值. 那就是说,如果当前管道内有m条请求, 我想知道,升序排序后第floor(

俯瞰风景 1002

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Q41数据流中的中位数

数据流中的中位数 文章目录数据流中的中位数题目思路实现 题目 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 思路 如果能获取所有的数据之后,可以利用快排的pa...

mhywoniu的博客 340

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

leetcode刷题笔记-LCP24-set维护中位数

题目链接:https://leetcode-cn.com/problems/5TxKeK/submissions/ 题意 给定一个n长度数组,求对于每个1≤i≤n1\leq i\leq n1≤i≤n将初始数组0到i−1位变成x,x+1,x+2,...x+i0到i-1位变成x,x+1,x+2,...x+i0到i−1位变成x,x+1,x+2,...x+i的最小操作数,每次操作可以将数组的某一位+1或-1 题解 考虑一开始以第一位为基准然后所有数值减小nums[0]+inums[0]+inums[0]+i,现在题

qq_38983891的博客 477

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

hdu5249(权值线段树)

链接:点击打开链接题意:有3种形式  "in x": 代表重要值为x(0≤x≤109)的请求被推进管道。  "out": 代表服务拉取了管道头部的请求。  "query: 代表我想知道当前管道内请求重要值的中间值. 那就是说,如果当前管道内有m条请求, 我想知道,升序排序后第floor(m/2)+1th 条请求的重要值.代码:#include &lt;map&gt; #include &lt;st...

stay_accept的专栏 547

P1168 中位数(vector 实现 set)

int n,m,t; int i,j,k; vector<int> v; int main() { //IOS; while(sd(n)==1){ for(i=1;i<=n;i++){ int x; sd(x); v.insert(upper_bound(v.begin(),v.end(),x),x); if(i&1) p...

C_Dreamy的博客 619

hdu5249--权值线段树

权值线段树,是以权值为下标的线段树,不像普通的线段树一样。 但是对于较大的数据,就需要离散化来解决空间上的不足。 权值线段树这样一说,有点儿像主席树的感觉。空间上也优于主席树。但是它对于子区间却无能为力。它对于一些动态的整个区间上的查询还是比较好用。 就像hdu5249就是动态中位数,就可以这样来处理。

萍水相逢,尽是他乡之客 1272

hdu 5249 KPI 【二分查找】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5249 分析:这道题是2015百度之星初赛1的4题 这道题不算太难当时队友做出来了,不过费了老大劲,其实我从中能够吸取教训的, 原因是,我一看这道题就是数据结构的,然后和队友想的一样二分查找,但是从中 遇到了一系列的问题: 首先储存数据我们不能用带有下标的数组,因为题目中的数据是可删可添的这样

letterwuyu的专栏 1208

CDOJ1339 郭大侠与线上游戏(维护一个set中的中位数——平衡树/双set)

http://acm.uestc.edu.cn/#/problem/show/1339 题意:有三种操作,分别是、    1、向队列推入一个数x。    2、弹出这个队列的第一个数字    3、查询这个队列的中位数是多少。    中位数定义为该队列升序排序后第k/2+1个数    操作总数n<=1e6 分析:   当然最裸的想法就是直接平衡树   这里提另外一个巧妙的用se...

weixin_30896825的博客 199

hdu5249 Tricks Device(网络流最大匹配)

分析题意可知: 1、最少需要切断多少边使吴不能找到张(题意吴只能走最短路径上面的边),对从起点到终点的最短路径重新建图,每条边的权值为1,求最大流即可 2、在吴可以找到张的前提下,最多可以切断边的数量:只需要在所有最短路径中寻找一条经过边数量最少的最短路径,用边的总数减去它即可(逆向思维) 代码如下: #include #include #include #include #def

Crazy_Bear 685

hdu 5249(权值线段树)

一道权值线段树的题:也不算是板子题,变相求第k大 题目链接:KPI 题解: 由于数据范围比较大,所以需要离散化,二分+vector是我目前已知的最快的一种方法,这题就是一个变相求第k大问题,然后用队列模拟一下指令输入即可 AC代码: #include<cstdio> #include<algorithm> using namespace std; #include&...

yangzijiangac的博客 258

hdu5249

这个是去年astar的题~ 标准做法主席树,然而渣渣并不会(我确实叫zhazha。。。), 所以,他先离线,离散化,然后树状数组+二分水过了。。。。 离线的目的主要是为了离散化,剩下的就和用一个树状数组维护一个数之前有多少个数比他小差不多~~ 二分答案+树状数组求和判断即可,注意二分何时终止~~(复杂度O(nlognlogn)) 1 #include <bits/std...

weixin_30585437的博客 194

HDU 5249 KPI

查找一个序列的中位数

大咸鱼。。。 612
上一篇: HDU 5265 pog loves szh II(二分)
下一篇: hdu 5239 Doom(线段树+数论)
HelloWorld10086
博客等级 码龄12年 88粉丝 614原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值