一个非常奇怪的问题

P1168 中位数

__zzh @ 2022-11-18 00:11:18

如果是下面这样写就是AC

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef pair<int,int> PII;
typedef long long ll;
const int INF=0x3f3f3f3f,mod=1e9+7;
priority_queue<int> q1;
priority_queue<int,vector<int>,greater<int> >q2;
int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin>>n;
  int x;
  cin>>x;
  cout<<x<<endl;
  q2.push(x);
  for(int i=2;i<=n;i++)
  {
    cin>>x;
    if(x>=q2.top()) q2.push(x);
    else q1.push(x);/////////
     if(q1.size()<q2.size())
    {
      int t=q2.top();
      q2.pop();
      q1.push(t);
    }
    if(q1.size()>q2.size()) {
      int t=q1.top();
      q1.pop();
      q2.push(t);
    }///////////
    if(i%2==1) cout<<q2.top()<<endl;
  }
  return 0;
}

可是我把两个//////之间的if交换一下顺序 就不对了 为什么

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef pair<int,int> PII;
typedef long long ll;
const int INF=0x3f3f3f3f,mod=1e9+7;
priority_queue<int> q1;
priority_queue<int,vector<int>,greater<int> >q2;
int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin>>n;
  int x;
  cin>>x;
  cout<<x<<endl;
  q2.push(x);
  for(int i=2;i<=n;i++)
  {
    cin>>x;
    if(x>=q2.top()) q2.push(x);
    else q1.push(x);//////这两个if顺序换了 其他都一样的
    if(q1.size()>q2.size()) {
      int t=q1.top();
      q1.pop();
      q2.push(t);
    }
     if(q1.size()<q2.size())
    {
      int t=q2.top();
      q2.pop();
      q1.push(t);
    }/////////
    if(i%2==1) cout<<q2.top()<<endl;
  }
  return 0;
}

by xuekaiwen_emmm @ 2023-01-02 21:12:54

emmm,不对是指WA还是别的什么(只是好奇,请不要对我这个蒟蒻抱有期待)


|