Kỹ thuật tìm kiếm - Hưng
Đếm số lần xuất hiện (tìm kiếm tuyến tính)
Nộp bàiPoint: 1
Cho dãy số A gồm N phần tử và số nguyên K. Hãy đếm xem số K xuất hiện bao nhiêu lần trong dãy A.
Dữ liệu vào:
Dòng 1: Hai số nguyên N và K.
Dòng 2: N số nguyên A1, A2, ..., AN.
Dữ liệu ra: Số lượng phần tử có giá trị bằng K.
Ràng buộc: 1 <= N <= 10^6; |Ai|, |K| <= 10^9.
Ví dụ 1:
Input:
6 5
5 1 5 2 5 3
Output:
3
Ví dụ 2:
Input:
5 100
1 2 3 4 5
Output:
0
Tìm kiếm trong đoạn (tìm kiếm tuyến tính)
Nộp bàiPoint: 1
Cho dãy số A gồm N phần tử và Q truy vấn. Mỗi truy vấn gồm 3 số L, R, X. Hãy kiểm tra xem số X có xuất hiện trong đoạn từ chỉ số L đến chỉ số R của mảng hay không.
Dữ liệu vào:
Dòng 1: Hai số N và Q.
Dòng 2: N số nguyên A1, A2, ..., AN.
Q dòng tiếp theo: Mỗi dòng gồm 3 số L, R, X.
Dữ liệu ra: Với mỗi truy vấn, in ra "YES" nếu tìm thấy, "NO" nếu không.
Ràng buộc: 1 <= N, Q <= 1000; 1 <= L <= R <= N; |Ai|, |X| <= 10^9. (Lưu ý: N nhỏ để chấp nhận độ phức tạp O(N*Q)).
Ví dụ 1:
Input:
5 2
1 2 3 4 5
1 3 2
3 5 1
Output:
YES
NO
Ví dụ 2:
Input:
4 1
10 20 30 40
2 3 40
Output:
NO
Đếm số bội của K
Nộp bàiPoint: 1
Cho dãy số A gồm N phần tử và số nguyên dương K. Hãy đếm xem trong dãy có bao nhiêu số chia hết cho K.
Dữ liệu vào:
Dòng 1: Hai số nguyên N và K.
Dòng 2: N số nguyên A1, A2, ..., AN.
Dữ liệu ra: Số lượng phần tử chia hết cho K.
Ràng buộc: 1 <= N <= 10^6; 1 <= K <= 10^9; |Ai| <= 10^9.
Ví dụ 1:
Input:
5 2
1 2 3 4 5
Output:
2
Ví dụ 2:
Input:
4 3
1 2 4 5
Output:
0
Điểm bất động
Nộp bàiPoint: 1
Cho dãy số A gồm N phần tử được đánh số từ 0 đến N-1. Hãy tìm chỉ số i đầu tiên sao cho A[i] == i. Nếu không có, in -1.
Dữ liệu vào:
Dòng 1: Số nguyên dương N.
Dòng 2: N số nguyên A0, A1, ..., AN-1.
Dữ liệu ra: Chỉ số i tìm được hoặc -1.
Ràng buộc: 1 <= N <= 10^6; |Ai| <= 10^9.
Mảng không nhất thiết phải sắp xếp.
Ví dụ 1:
Input:
5
-1 0 2 5 10
Output:
2
Ví dụ 2:
Input:
3
1 2 3
Output:
-1
Ký tự xuất hiện đầu tiên
Nộp bàiPoint: 1
Cho một chuỗi ký tự S và một ký tự C. Hãy tìm vị trí đầu tiên (tính từ 0) của C trong S.
Dữ liệu vào:
Dòng 1: Chuỗi S (không chứa dấu cách).
Dòng 2: Ký tự C.
Dữ liệu ra: Chỉ số đầu tiên của C hoặc -1.
Ràng buộc: Độ dài S <= 10^6.
Ví dụ 1:
Input:
programming
r
Output:
1
Ví dụ 2:
Input:
hello
z
Output:
-1
Cực đại địa phương
Nộp bàiPoint: 1
Cho dãy số A gồm N phần tử. Một phần tử được gọi là cực đại địa phương nếu nó lớn hơn cả phần tử đứng liền trước và liền sau nó (nếu có). Hãy đếm số lượng cực đại địa phương trong dãy.
Dữ liệu vào:
Dòng 1: Số nguyên dương N.
Dòng 2: N số nguyên A1, A2, ..., AN.
Dữ liệu ra: Số lượng cực đại địa phương.
Ràng buộc: 1 <= N <= 10^6; |Ai| <= 10^9.
Ví dụ 1:
Input:
5
1 5 2 4 3
Output:
2
Ví dụ 2:
Input:
3
1 1 1
Output:
0
Khoảng cách xa nhất
Nộp bàiPoint: 1
Cho dãy số A gồm N phần tử và một số nguyên X. Hãy tìm khoảng cách lớn nhất giữa chỉ số đầu tiên và chỉ số cuối cùng mà X xuất hiện. Nếu X xuất hiện ít hơn 2 lần hoặc không xuất hiện, in ra 0.
Dữ liệu vào:
Dòng 1: Số nguyên N và X.
Dòng 2: N số nguyên A1, A2, ..., AN.
Dữ liệu ra:
Khoảng cách lớn nhất (LastIndex - FirstIndex).
Ràng buộc: 1 <= N <= 10^6; |Ai|, |X| <= 10^9.
Ví dụ 1:
Input:
6 5
5 1 2 5 3 5
Output:
5
Ví dụ 2:
Input:
4 10
1 2 3 4
Output:
0
Vị trí của X
Nộp bàiPoint: 1
Cho dãy số A gồm N số nguyên đã sắp xếp tăng dần. Hãy tìm chỉ số (vị trí) của số X trong dãy. Nếu X không tồn tại, in ra -1. Quy ước chỉ số bắt đầu từ 1.
Dữ liệu vào:
Dòng 1: N và X.
Dòng 2: N số nguyên A[i].
Dữ liệu ra:
Một số nguyên duy nhất là vị trí của X hoặc -1.
Giới hạn:
1 <= N <= 10^5
Các phần tử trong mảng đôi một khác nhau.
Ví dụ:
Input:
5 4
1 3 4 7 9
Output:
3
Tìm kiếm cơ bản (bs)
Nộp bàiPoint: 1
Cho một dãy số nguyên A gồm N phần tử đã được sắp xếp theo thứ tự tăng dần. Hãy kiểm tra xem số nguyên X có xuất hiện trong dãy hay không.
Dữ liệu vào:
Dòng đầu tiên chứa hai số nguyên dương N và X.
Dòng thứ hai chứa N số nguyên A[1], A[2], ..., A[N], các số cách nhau bởi dấu cách.
Dữ liệu ra:
In ra "YES" nếu X xuất hiện trong dãy, ngược lại in ra "NO".
Giới hạn:
1 <= N <= 10^5
|A[i]|, |X| <= 10^9
Ví dụ:
Input:
5 3
1 2 3 4 5
Output:
YES
Tìm Kiếm Trong Mảng Sắp Xếp (tìm kiếm nhị phân)
Nộp bàiPoint: 1
Cho một dãy số nguyên A gồm N phần tử đã được sắp xếp theo thứ tự tăng dần. Có Q truy vấn, mỗi truy vấn gồm một số nguyên X. Hãy kiểm tra xem X có xuất hiện trong dãy A hay không.
Dữ liệu vào:
Dòng 1: Hai số nguyên N và Q.
Dòng 2: N số nguyên là các phần tử của dãy A.
Q dòng tiếp theo: Mỗi dòng chứa một số nguyên X cần tìm.
Dữ liệu ra:
Với mỗi truy vấn, in ra "YES" nếu X xuất hiện trong A, ngược lại in ra "NO".
Ràng buộc:
1 <= N, Q <= 10^5
A[i]|, |X| <= 10^9
Ví dụ:
Input:
5 3
1 3 5 7 9
3
4
9
Output:
YES
NO
YES
Tìm kiếm trong mảng giảm dần
Nộp bàiPoint: 1
Cho dãy số A gồm N phần tử được sắp xếp theo thứ tự GIẢM dần. Hãy kiểm tra xem X có tồn tại trong dãy không.
Dữ liệu vào:
Dòng 1: N và X.
Dòng 2: N số nguyên A[i] (A[1] >= A[2] >= ... >= A[N]).
Dữ liệu ra:
In ra "YES" hoặc "NO".
Giới hạn:
1 <= N <= 10^5
Ví dụ:
Input:
5 2
5 4 3 2 1
Output:
YES