40分,各位大佬帮忙看下
  • 板块P1168 中位数
  • 楼主jh2023
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/2 12:09
  • 上次更新2024/8/2 13:45:21
查看原帖
40分,各位大佬帮忙看下
1043593
jh2023楼主2024/8/2 12:09

我不知道为什么,好像输出答案的时候会多出几个,前面的应该是对的

#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int n;
int nums[100005];
int cnt;
int c;
int get_abs(int, int);
priority_queue <int> q_max;
priority_queue <int, vector<int>, greater<int> > q_min;

int main() {
	cin >> n;
	int temp;
	for (int i = 1; i <= n; i++) {
		if (c == 2) {
			c = 0;
			while (get_abs(q_max.size(), q_min.size()) > 1) {
				if (q_max.size() > q_min.size()) {
					q_min.push(q_max.top());
					q_max.pop();
				} else {
					q_max.push(q_min.top());
					q_min.pop();
				}
			}
			if (q_max.size() > q_min.size()) {
				nums[++cnt] = q_max.top();
			} else {
				nums[++cnt] = q_min.top();
			}
			temp = nums[cnt];
		}
		int num;
		cin >> num;
		if (i == 1 || i == n) {
			nums[++cnt] = num;
		}
		if (i == 1) {
			temp = num;
			q_max.push(num);
			continue;
		}
		c++;
		if (num > temp) {
			q_min.push(num);
		} else {
			q_max.push(num);
		}
	}
	for (int i = 1; i <= cnt; i++) {
		cout << nums[i] << endl;
	}
	return 0;
}

int get_abs(int a, int b) {
	if (a > b) {
		return a - b;
	} else {
		return b - a;
	}
}

2024/8/2 12:09
加载中...