动态k小
题目:
这道题目十分简单,只要用大根堆维护前k小的数字即可,用大根堆是因为方便输出(用小根堆需要输出堆底),前k个先单独输入,不输出(第k个除外,单独输出) ,之后k+1~n如果输入进来的数字比堆顶大,直接跳过,否则先把原堆顶弹出再推入输入进来的数字,每一次输出堆顶即可。
程序:
#include<bits/stdc++.h> using namespace std; long long n,k,t; priority_queue<long long> q; int main() { ios::sync_with_stdio(false); cin>>n>>k; for(int i=1;i<=k;i++) cin>>t,q.push(t); printf("%d\n",q.top()); for(long long i=k+1;i<=n;i++)// 2 1 { cin>>t; if(t<q.top()) q.pop(),q.push(t); printf("%d\n",q.top()); } return 0; }