疑问
  • 板块P1168 中位数
  • 楼主Mr_ll
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/10/13 19:39
  • 上次更新2023/11/4 03:54:09
查看原帖
疑问
365532
Mr_ll楼主2021/10/13 19:39

已AC(代码)(码风较丑,勿怪)

#include<iostream>
#include<cmath>
#include<cstdio>
#include<queue>
using namespace std;
const int N=1e5+5;
int n;
priority_queue<long long> da,xiao;
long long a[N],mid;
int main(){
	scanf("%d",&n);
	scanf("%lld",&a[1]);
	mid=a[1];da.push(a[1]);
	printf("%lld\n",a[1]);
	for(int i=2;i<=n;i++){
		scanf("%lld",&a[i]);
		if(a[i]>mid) xiao.push(-a[i]);
		else da.push(a[i]);
		while(da.size()>xiao.size()){xiao.push(-da.top());da.pop();}
		while(xiao.size()>da.size()){da.push(-xiao.top());xiao.pop();}
		if(da.size()>xiao.size()) mid=da.top();
		else mid=-xiao.top();
		if(i%2==1)printf("%lld\n",mid);
	}
	return 0;
}

while里改成>0就不运行了

#include<iostream>
#include<cmath>
#include<cstdio>
#include<queue>
using namespace std;
const int N=1e5+5;
int n;
priority_queue<long long> da,xiao;
long long a[N],mid;
int main(){
	scanf("%d",&n);
	scanf("%lld",&a[1]);
	mid=a[1];da.push(a[1]);
	printf("%lld\n",a[1]);
	for(int i=2;i<=n;i++){
		scanf("%lld",&a[i]);
		if(a[i]>mid) xiao.push(-a[i]);
		else da.push(a[i]);
		while(da.size()-xiao.size()>0){xiao.push(-da.top());da.pop();}
		while(xiao.size()-da.size()>0){da.push(-xiao.top());xiao.pop();}
		if(da.size()>xiao.size()) mid=da.top();
		else mid=-xiao.top();
		if(i%2==1)printf("%lld\n",mid);
	}
	return 0;
}
2021/10/13 19:39
加载中...