思维-Black Box POJ - 1442
#include<iostream> #include<vector> #include<algorithm> #include <queue> #include <functional> #define endl '\n' #define _for(i,a,b) for(int i=a;i<b;i++) using namespace std; const int N = 1e5+5; typedef long long ll; int m,n; int a[N]; int main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); priority_queue<int ,vector<int>,greater<int> > q1; priority_queue<int ,vector<int>,less<int> > q2; cin>>n>>m; _for(i,1,n+1) cin>>a[i]; int pos = 1; _for(i,1,m+1){ int num; cin>>num; while( pos<=num ){ q1.push( a[pos] ); pos++; } while( q2.size() && q2.top() > q1.top() ){ int a = q1.top(),b = q2.top(); q1.pop(),q2.pop(); q1.push(b),q2.push(a); } cout<<q1.top()<<endl; q2.push( q1.top() ); q1.pop(); } return 0; }
两个优先队列,快速找到第K大的数