Problem Description
Old contest software uses bubble sort for generating final standings. But now, there are too many teams and that software works too slow. You are asked to write a program, which generates exactly the same final standings as old software, but fast.
Input
The first line of input contains only integer 1 < N ≤ 150000 — number of teams. Each of the next N lines contains two integers 1 ≤ ID ≤ 107 and 0 ≤ M ≤ 100. ID — unique number of team, M — number of solved problems.
Output
Output should contain N lines with two integers ID and M on each. Lines should be sorted by M in descending order using bubble sort (or analog).
Sample Input
input | output |
---|---|
8 1 2 16 3 11 2 20 3 3 5 26 4 7 1 22 4 |
3 5 26 4 22 4 16 3 20 3 1 2 11 2 7 1 |
Hint
Bubble sort works following way:
while (exists A[i] and A[i+1] such as A[i] < A[i+1]) do
Swap(A[i], A[i+1]);
对结构体进行稳定排序,stable_sort()内部实现是归并排序,sort()是不稳定的排序。
快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,
而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。
代码如下:
1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 #include<iterator> 5 6 using namespace std; 7 8 typedef struct 9 { 10 int id; 11 int m; 12 }node; 13 14 bool cmp(const node &a, const node &b) 15 { 16 return b.m<a.m; 17 } 18 19 int main() 20 { 21 vector <node> team; 22 int i, n; 23 int id, m; 24 node t; 25 cin >> n; 26 for (i=0; i<n; i++) 27 { 28 cin >> id >> m; 29 t.id=id; 30 t.m=m; 31 team.push_back(t); 32 } 33 stable_sort(team.begin(), team.end(), cmp); 34 vector<node>::iterator p; 35 for (p=team.begin(); p!=team.end(); p++) 36 cout << p->id << " " << p->m << endl; 37 return 0; 38 }