---
# System prepended metadata

title: Sắp xếp (Sortings)

---

# Sắp xếp (Sortings)


------------------

[TOC]

------------------
## **Bài tập**
### **Bài 1:** [**Young Explorers**](https://codeforces.com/contest/1355/problem/B)
- **Tóm đề**
    - Cho mảng $a$ có $n$ phần tử, đếm số subset tạo được sao cho mọi phần tử trong subset phải bé hơn kích thước của subset. (*Lưu ý: Mỗi phần tử của mảng chỉ thuộc **duy nhất** một subset*).
    - Cho mảng $a$ có $n$ phần tử, tính tổng của tích tất cả bộ 3 số $a[i], a[j], a[k]$ $(1 ≤ i < j < k ≤ n)$ 
### **Bài 2:** [**Less or Equal**](https://codeforces.com/problemset/problem/977/C)
- **Tóm đề**
    - Cho mảng $a$ có $n$ phần tử và số nguyên $k$, in ra $x$ sao cho có đúng $k$ phần tử trong mảng $a$ bé hơn hoặc bằng $x$.


## **Lời giải**
### [**Young Explorers**](https://codeforces.com/contest/1355/problem/B)
- **Code mẫu**
```cpp=
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 5;

int n;
int a[N];

void sol(){
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> a[i];
    sort(a + 1, a + n + 1);
    int ans = 0, cnt = 0;
    for(int i = 1; i <= n; ++i){
        ++cnt;
        if(cnt >= a[i]){
            ++ans;
            cnt = 0;
        }
    }
    cout << ans << "\n";
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int t; cin >> t;
    while(t--) sol();

    return 0;
}
```
### [**Less or Equal**](https://codeforces.com/problemset/problem/977/C)
- **Code mẫu**
```cpp=
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 5;

int n, k, a[N];

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> k;
    for(int i = 1; i <= n; ++i) cin >> a[i];
    sort(a + 1, a + n + 1);
    if((a[k+1] == a[k]) || (k == 0 && a[1] - 1 <= 0)) cout << -1;
    else {
        if(k == 0) cout << a[1] - 1;
        else cout << a[k];
    }

    return 0;
}
```