1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<cmath> 5 using namespace std; 6 const int maxn=1e5+7; 7 int n,inp; 8 priority_queue<int>q1; 9 priority_queue<int,vector<int>,greater<int> > q2; 10 int main(){ 11 cin>>n;cin>>inp;q1.push(inp);cout<<inp<<endl; 12 for(int i=2;i<=n;i++){ 13 cin>>inp; 14 if(inp>q1.top()) q2.push(inp); 15 else q1.push(inp); 16 while (q1.size()-q2.size()>1&&q2.size()-q1.size()>1){ 17 if (q1.size()>q2.size()){q2.push(q1.top());q1.pop();} 18 if (q1.size()<q2.size()){q1.push(q2.top());q2.pop();} 19 } 20 if(i%2==1){ 21 if(q1.size()>q2.size()) cout<<q1.top()<<endl; 22 else cout<<q2.top()<<endl; 23 } 24 } 25 return 0; 26 }
不要想什么树状数组,离散化,就是两个堆来维护,这种想法接触过