Tìm kiếm nhị phân biến đổi - Ôn chuyên 2026 lớp 1

Tìm kiếm phần tử xuất hiện cuối cùng

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 1

Cho một mảng A nguyên gồm N phần tử, hãy tìm chỉ số của phần tử xuất hiện cuối cùng trong mảng, ví dụ mảng 1, 3, 4, 5, 5, 5, 6, 7. Nếu tìm số 5 thì số 5 xuất hiện cuối cùng sẽ có chỉ số 5, chỉ số này được in ra. Nếu không tìm thấy thì in ra -1


Ràng buộc: ~0 < N \leq 10^6~, ~-10^6 < A[i] \leq 10^6~


Input 01:
8 5
1 3 4 5 5 5 6 7
Output 01:
5
Input 02:
7 -3
-3 -3 -1 4 5 6 7
Output 02:
1
Input 03:
6 10
1 3 4 5 6 7
Output 03:
-1

Tìm kiếm vị trí đầu tiên của phần tử x trong mảng

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 1

Cho một mảng A nguyên gồm N phần tử đã sắp xếp tăng dần, hãy tìm chỉ số của phần tử x xuất hiện đầu tiên trong mảng, ví dụ mảng 1, 3, 4, 5, 5, 5, 6, 7. Nếu tìm số x = 5 thì số 5 xuất hiện đầu tiên sẽ có chỉ số 3, in ra chỉ số này. Nếu không tìm thấy in ra -1.


Ràng buộc: ~0 < N \leq 10^6~, ~-10^6 < A[i] \leq 10^6~


Input 01:
8 5
1 3 4 5 5 5 6 7
Output 01:
3
Input 02:
7 -3
-3 -3 -1 4 5 6 7
Output 02:
0
Input 03:
6 10
1 3 4 5 6 7
Output 03:
-1

Vị trí đầu tiên lớn hơn hoặc bằng X

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 1

Cho mảng A gồm N phần tử. Sử dụng hàm có sẵn tìm vị trí đầu tiên của phần tử lớn hơn hoặc bằng X.


Dòng đầu tiên nhập N và X

Dòng tiếp theo nhập N giá trị của mảng A


In ra vị trí nếu tìm thấy, nếu không tìm thấy thì in ra N.


Ràng buộc: ~0 < N \leq 10^6~; ~0 \leq A[i] \leq 10^9~


Input 01:
10 6
3 5 6 6 6 6 9 10 11 13
Output 01:
2

Vị trí đầu tiên trong mảng lớn hơn hoặc bằng 6 là vị trí có chỉ số là 2 (có giá trị là 6)

Input 02:
10 14
3 5 6 6 6 6 9 10 11 13
Output 02:
10

Cặp số có tổng bằng K trong mảng

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 1

Cho mảng a gồm n phăn tử và số nguyên dương k. Đếm số lượng cặp số ai, aj (i != j) có tổng bằng k.

Gợi ý: Sắp xếp mảng tăng dẫn sau đó với mỗi phần tử a[i] trong mảng tìm xem trong đoạn [i + 1, n - 1] có bao nhiêu phần tử có giá trị là k - a[i], bằng cách tìm vị trí đầu tiên và vị trí cuối cùng của phần tử có giá trị là k - a[i] => Số lượng


Định dạng đầu vào: Dòng thứ 1 là số lượng phần tử trong mảng và số nguyên dương k; Dòng thứ 2 là n phần tử trong mảng


Ràng buộc: 2<=п<=10^6; 1<=k<=10^6; 0<=a(i)<=10^6;


Định dạng đầu ra: In ra số lượng cặp số có tổng bằng k


Input:
4 4
2 2 2 2
Output:
6

Cặp số có hiệu bằng K

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 1

Cho mảng A gồm N phần tử và số X. Nhiệm vụ của bạn là tìm cặp phần tử A[i] - A[j] = X.

Nếu tồn tại A[i] - A[j] = X đưa ra 1, ngược lại đưa ra -1.

Input Format: Dòng thứ nhất là cặp số N, X; Dòng tiếp theo là N số A(i] là các phần tử của mảng A.

Ràng buộc: ~1 ≤ N ≤ 10^5~; ~1 ≤ X, A[i] ≤ 10^{5}~.


Input 01:
5 4
1 2 3 4 5
Output 01:
1

Giải thích: Cặp số có hiệu bằng 4 là 5 và 1

Input 02:
5 5
1 2 3 4 5
Output 02:
-1

Số nhỏ nhất lớn hơn Ai

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 1

Cho mảng A gồm n phần tử. Nhiệm vụ của bạn là tìm giá trị nhỏ nhất (phải thuộc mảng A) lớn hơn Ai (i = 0, 1, 2,, n-1). Đưa ra ký tự _ nếu Ai không có phần từ lớn hơn nó. Ví dụ với mảng A = (13, 6, 7, 12) ta có kết quả là (_ , 7, 12, 13).


Định dạng đầu vào: Dòng đầu tiên đưa vào n là số phần tử của mảng A; Dòng kế tiếp đưa vào n số A[i] của mảng; các số được viết cách nhau một vài khoảng trống.


Ràng buộc: 1 <= N <= 10^5; 1 ≤ A[i] <= 10^5.


Định dạng đầu ra: Đưa ra kết quả trên 1 dòng


Input:
9
6 3 9 8 10 2 1 15 7
Output:
7 6 10 9 15 3 2 _ 8

Tìm kiếm nhị phân biến đổi (sắp xếp - tìm kiếm)

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 1

Cho mảng A có N phần tử là các số nguyên đã được sắp xếp theo thứ tự tăng dần. Hãy viết các hàm với độ phức tạp O(logN):

  1. Tìm vị trí xuất hiện đầu tiên của phần tử X trong mảng, nếu không có in ra -1

  2. Tìm vị trí xuất hiện cuối cùng của phần tử X trong mảng, nếu không có in ra -1

  3. Tìm vị trí xuất hiện đầu tiên của phần tử >=X trong mảng, nếu không có in ra -1

  4. Tìm vị trí xuất hiện đầu tiên của phần tử >X trong mảng, nếu không có in ra -1

  5. Tìm số lần hiện của phần tử X trong mảng sử dụng kết quả trong hàm 1 và 2


Ràng buộc: ~1 \leq N \leq 10^6~; ~0 \leq A[i] \leq 10^6~


Input:
10 1100
10 1000 2172 2921 3400 4185 4639 6096 6244 9102
Output:
-1
-1
2
2
0

Cặp số có tổng lớn hơn K (kỹ thuật sắp xếp - tìm kiếm)

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 1

Cho mảng a gồm n phăn tử và số nguyên dương k. Đếm số lượng cặp số ai, aj (i != j) có tổng lớn hơn k.


Định dạng đầu vào: Dòng thứ 1 là số lượng phần tử trong mảng và số nguyên dương k; Dòng thứ 2 là n phần tử trong mảng


Ràng buộc: 2<=п<=10^6; 1<=k<=10^6; 0<=a(i)<=10^6;


Định dạng đầu ra: In ra số lượng cặp số có tổng bằng k


Input:
4 5
2 3 4 5
Output:
5

Cặp số có tổng nhỏ hơn K

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 1

Cho mảng a gồm n phăn tử và số nguyên dương k. Đếm số lượng cặp số ai, aj (i != j) có tổng nhỏ hơn k.


Định dạng đầu vào: Dòng thứ 1 là số lượng phần tử trong mảng và số nguyên dương k; Dòng thứ 2 là n phần tử trong mảng


Ràng buộc: 2<=п<=10^6; 1<=k<=10^6; 0<=a(i)<=10^6;


Định dạng đầu ra: In ra số lượng cặp số có tổng bằng k


Input:
4 5
2 2 2 2
Output:
6