標籤:des style blog http color os
題目
詢問第K大的數
//這是我最初的想法,用multiset,AC了——好吧,也許是資料弱也有可能
//multiset運用——不去重,邊插入邊排序//iterator的運用,插入的時候,如果是相同的數沒直接放在相同的現有的資料後面的#include<cstdio>#include<cstring>#include<algorithm>#include<set>using namespace std;//#define IN freopen("c:\\Users\\nit\\desktop\\input.txt", "r", stdin)//#define OUT freopen("/home/nit/output.txt", "w", stdout)//int gcd(int a,int b){return b==0?a:gcd(b,a%b);}int main(){ multiset<int>ms; multiset<int>::iterator it; int n,k,a; char q[10]; while(~scanf("%d%d",&n,&k)) { ms.clear(); int yi=1; for(int i=0;i<n;i++) { scanf("%s",q); if(q[0]==‘I‘) { scanf("%d",&a); ms.insert(a); if(yi==0) { if(a>=*it)//如果比現有的第k大的數大,就更新 it++; } } else { if(yi){ yi=0; a=k; for(it=ms.end();a!=0;it--,a--); printf("%d\n",*it); } else { printf("%d\n",*it); } } } } return 0;}View Code
/*
後來百度上別人的思路,用優先隊列:
struct Node
{
int x;
friend bool operator < (Node a,Node b)
{
return a.x > b.x;
}
};
priority_queue <Node> q;
主要用於重載小於符號,讓小的優先.
輸入時先輸入k個數,輸入k個數後再輸入時需要判斷輸入的數與隊頭的大小關係.
輸入數小於隊頭則不進隊.
輸入數大於隊頭則進隊,彈出隊頭.
保證優先隊列中只有k的元素.
而隊頭是k個元素中最小的元素.
即第k大元素
好吧,我覺得也蠻好的
這是網址:http://www.cnblogs.com/zxotl/archive/2012/09/02/2667820.html
*/