做了一道对顶堆(反过来的)的练习。。很水
#include<bits/stdc++.h> using namespace std; const int N=200005; priority_queue<int,vector<int>,greater<int> >Q2; priority_queue<int>Q1; int a[N],b[N]; int main(){ int m,n; scanf("%d%d",&m,&n); for(int i=1;i<=m;++i)scanf("%d",&a[i]); for(int i=1;i<=n;++i)scanf("%d",&b[i]); int cnt=0; for(int i=1;i<=m;++i){ if(Q1.size()&&a[i]<Q1.top()){ Q2.push(Q1.top()); Q1.pop(); Q1.push(a[i]); } else Q2.push(a[i]); while(b[cnt+1]==i){ Q1.push(Q2.top()); Q2.pop(); printf("%d ",Q1.top()); ++cnt; } } return 0; }