输入输出,取消同步流

1
2
3
4
5
6
7
8
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
//取消同步流
}

基于比较的排序与桶排序

【模板】排序

题目描述

将读入的 $N$ 个数从小到大排序后输出。

输入格式

第一行为一个正整数 $N$。

第二行包含 $N$ 个空格隔开的正整数 $a_i$,为你需要进行排序的数。

输出格式

将给定的 $N$ 个数从小到大输出,数之间空格隔开,行末换行且无空格。

样例 #1

样例输入 #1

1
2
5
4 2 4 5 1

样例输出 #1

1
1 2 4 4 5

提示

对于 $20%$ 的数据,有 $1 \leq N \leq 10^3$;

对于 $100%$ 的数据,有 $1 \leq N \leq 10^5$,$1 \le a_i \le 10^9$。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <bits/stdc++.h>
using namespace std;

signed main()
{
ios::sync_with_stdio(0);
int n;
cin >> n;
vector<int> a(n, 0);
for(int i = 0;i < n; ++ i)
cin >> a[i];
sort(a.begin(), a.end());
for(int i = 0; i < n; ++i)
cout << a[i] << " \n"[i == n-1];
return 0;
}

【深基9.例1】选举学生会

题目描述

学校正在选举学生会成员,有 $n$($n\le 999$)名候选人,每名候选人编号分别从 $1$ 到 $n$,现在收集到了 $m$($m \le 2000000$)张选票,每张选票都写了一个候选人编号。现在想把这些堆积如山的选票按照投票数字从小到大排序。

输入格式

输入 $n$ 和 $m$ 以及 $m$ 个选票上的数字。

输出格式

求出排序后的选票编号。

样例 #1

样例输入 #1

1
2
5 10
2 5 2 2 5 2 2 2 1 2

样例输出 #1

1
1 2 2 2 2 2 2 2 5 5

桶排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 9;
int a[N];//a[i]表示数字i出现的次数

signed main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n,m;cin >> n >> m;
for(int i = 1;i <= m; ++ i){
int x;cin >> x;
a[x] ++;
}
for(int i = 1;i <= n; ++ i){
for(int j = 1;j <= a[i]; ++ j){
cout<< i << " ";
}
}
return 0;
}

暴力枚举与优化