3871 中位数

3871 中位数

这个题做了一个中午了,还是不会,我服气了
维护中位数,就得利用对顶堆来解决,对顶堆就是维护两个堆,从而进行解决我们想要的问题
因为说到中位数,需要我们所操作的序列必须要进行一个排序
利用一个大根堆一个小根堆,小根堆放n/2个元素,大根堆放n-n/2个元素
前半段存大根堆,后半段存小根堆,所以大根堆的堆顶就是中位数

基本上做了一天了,终于悟出来了,真的很水
这里运用的是一个叫做对顶堆的操作,再加上优先队列的黑科技骚操作,这里需要在纸上模拟一下这个操作,预处理两个堆,一个大根堆一个小根堆,从中间进行分开,前半段大根堆,后半段小根堆(这里使用算中间点的方法是mid=(n+1)/2,这样做是为了确保奇数情况从而向上取整)
这样预处理的时候,我们不断地将新来的数对当前中位数进行比较,判断需要插入的地方,是大根堆还是小根堆
还需要思考一个问题,就是更新大根堆堆顶的元素,不断的地插入的过程中,会使一些中位数失去中位数的地位,重新的进行维护,删去大根堆堆顶元素然后插入小根堆,达到重新维护中位数的目的
那么什么时候重新维护中位数呢?对于大根堆,就是超出小根堆两个元素的时候,因为就不满足中位数的性质了;对于小根堆,如果大于大根堆就不,满足了,因为想一下,中位数分开的两个区间,只能相等或者右差左一,不能右区间大,所以不满足了中位数的性质了,需要更新

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string> 
#include<queue> 
using namespace std;
const int SIZE=1e5+5;
int arr[SIZE];
priority_queue<int> qb;//大根堆 
priority_queue<int,vector<int>,greater<int> > qs;//小根堆 
int n,m;
string opt;
int k;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>arr[i];
	sort(arr+1,arr+n+1);
	int mid=(n+1)/2;//加一确保奇数向上取整
	for(int i=1;i<=mid;i++)
	{
		qb.push(arr[i]);
	 }
	 for(int i=mid+1;i<=n;i++)
	 {
	 	qs.push(arr[i]);
	 }
	 //前半段大根堆,后半段小根堆 
	 cin>>m;
	 while(m--)
	 {
	 	cin>>opt;
	 	if(opt[0]=='m')//模拟指令
	 		cout<<qb.top()<<"\n";
	 	else//模拟指令 
	 	{
	 		cin>>k;
	 		int temp=qb.top();
	 		if(k<temp)
	 		{
	 			qb.push(k);
	 			if(qb.size()-qs.size()==2)
	 			{
	 				int l=qb.top();
	 				qb.pop();
	 				qs.push(l);
					//这个操作就是说,插入的数超了的话需要重新维护中位数 
				 }
			 }
			 else
			 {
			 	qs.push(k);
			 	if(qs.size()>qb.size())
			 	{
			 		int l=qs.top();
			 		qs.pop();
			 		qb.push(l);
				 }
			 }
		 }
	 }
	return 0;
}
多源动态最优潮流的分布鲁棒优化方法(IEEE118节点)(Matlab代码实现)内容概要:本文介绍了基于Matlab代码实现的多源动态最优潮流的分布鲁棒优化方法,适用于IEEE118节点电力系统。该方法结合两阶段鲁棒模型与确定性模型,旨在应对电力系统中多源输入(如可再生能源)的不确定性,提升系统运行的安全性与经济性。文中详细阐述了分布鲁棒优化的建模思路,包括不确定性集合的构建、目标函数的设计以及约束条件的处理,并通过Matlab编程实现算法求解,提供了完整的仿真流程与结果分析。此外,文档还列举了大量相关电力系统优化研究案例,涵盖微电网调度、电动汽车集群并网、需求响应、储能配置等多个方向,展示了其在实际工程中的广泛应用价值。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事能源系统优化工作的工程师。; 使用场景及目标:①用于研究高比例可再生能源接入背景下电力系统的动态最优潮流问题;②支撑科研工作中对分布鲁棒优化模型的复现与改进;③为电力系统调度、规划及运行决策提供理论支持与仿真工具。; 阅读建议:建议读者结合提供的Matlab代码与IEEE118节点系统参数进行实操演练,深入理解分布鲁棒优化的建模逻辑与求解过程,同时可参考文中提及的其他优化案例拓展研究思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值