poj 2051
优先队列或者说是堆得应用,最暴力的想法就是没输出一个最小值,更新,然后再排序,若用快排,时间效率为O(knlgn),但不需要对所有的排次序,所以就用到最小堆
#include <iostream> #include <queue> #include <string> using namespace std; typedef struct node { int n,p,r; }ar; bool operator<(ar a,ar b) { if(a.p==b.p) return a.n>b.n; else return a.p>b.p; } priority_queue<ar> q; int main() { string re; int n,p,k; while(cin>>re) { if(re=="#") break; cin>>n>>p; ar tem1; tem1.n=n; tem1.p=p; tem1.r=p; q.push(tem1); } cin>>k; while(k--) { ar tem2; tem2=q.top(); cout<<tem2.n<<endl; tem2.p+=tem2.r; q.pop(); q.push(tem2); } return 0; }