Mảng 1 chiều nâng cao OLP ICTU 2026

Chuyển số dương lên đầu mảng

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

Point: 1

Nhập vào một mảng A gồm các số nguyên có N phần tử, hãy chuyển các số dương lên đầu mảng theo cách làm xáo trộn ít nhất.


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


Dữ liệu vào gồm 2 dòng, dòng thứ nhất là số lượng N phần tử, dòng thứ 2 lần lượt là N phần tử trong mảng A.


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

In ra số nguyên dương nhỏ nhất chưa xuất hiện trong mảng

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

Point: 1

Nhập vào một mảng các số nguyên dương A có N phần tử, in ra số nguyên dương nhỏ nhất chưa xuất hiện trong mảng.


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


Dữ liệu vào gồm 2 dòng, dòng thứ nhất là số lượng N phần tử, dòng thứ 2 lần lượt là N phần tử trong mảng A.


Input 01:
8
3 3 4 6 6 7 8 9
Output 01:
5

Lưu ý: Số nguyên dương cần in phải nằm trong khoảng từ min tới max + 1 của mảng

Input 02:
9
2 2 3 4 5 6 7 8 9
Output 02:
10

Tổng các số dương liên tiếp lớn nhất

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

Point: 1

Nhập vào một mảng các số nguyên A có N phần tử, in ra tổng giá trị các số dương liên tiếp lớn nhất.


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


Dữ liệu vào gồm 2 dòng, dòng thứ nhất là số lượng N phần tử, dòng thứ 2 lần lượt là N phần tử trong mảng A.


Input 01:
10
5 1 4 1 3 -2 1 2 -3 10
Output 01:
14
Input 02:
10
5 1 4 1 3 -2 1 2 -3 20
Output 02:
20

Tìm số lượng số dương liên tiếp nhiều nhất trong mảng

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

Point: 1

Nhập vào một mảng A gồm các số nguyên dương có N phần tử, in ra số lượng các số dương liên tiếp nhiều nhất trong mảng.


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


Dữ liệu vào gồm 2 dòng, dòng thứ nhất là số lượng N phần tử, dòng thứ 2 lần lượt là N phần tử trong mảng A.


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

Số lượng các số dương liên tiếp nhiều nhất trong mảng trên là 5

Input 02:
15
5 1 4 1 3 -2 1 2 -3 10 11 12 13 14 14
Output 02:
6

Tìm vị trí lớn nhất của phần tử nhỏ nhất và ngược lại

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

Point: 1

Nhập vào một mảng A gồm các số nguyên dương có N phần tử, hãy tìm và in ra vị trí lớn nhất (bắt đầu từ 0) của phần tử nhỏ nhất và vị trí đầu tiên của phần tử lớn nhất.

(Nếu code bằng Python thì mỗi số sẽ được nhập trên một dòng, cần đọc từng dòng một)


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


Dữ liệu vào gồm 2 dòng, dòng thứ nhất là số lượng N phần tử, dòng thứ 2 lần lượt là N phần tử trong mảng A.


Input:
10
5 1 4 10 3 2 1 2 3 10
Output:
1 6
10 3

Số 1 nhỏ nhất xuất hiện ở vị trí lớn nhất là 6

Số 10 lớn nhất xất hiện ở vị trí đầu tiên là 3


Phần tử xuất hiện nhiều nhất

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

Point: 1

Nhập vào một mảng A gồm các số nguyên có N phần tử, tìm phần tử có tần suất xuất hiện nhiều nhất, nếu có nhiều phần tử có cùng tần suất xuất hiện thì in ra phần tử có giá trị lớn hơn.


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


Dữ liệu vào gồm 2 dòng, dòng thứ nhất là số lượng N phần tử, dòng thứ 2 lần lượt là N phần tử trong mảng A.


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

Số 1 có tần suất xuất hiện 3 lần là lớn nhất

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

Số 1 và số 5 đều có tần suất xuất hiện 2 lần nhưng in ra số 5 vì 5 lớn hơn 1


Số lớn thứ nhì

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

Point: 1

Nhập vào một mảng A có N phần tử, in ra giá trị lớn thứ nhì của mảng và chỉ số của các số hạng đạt giá trị lớn nhì trong mảng.


Dòng thứ nhất Nhập N, từ dòng thứ 2 sẽ lần lượt nhập N phần tử của mảng A

In ra phần tử lớn thứ nhì và vị trí của các phần tử lớn thứ nhì trong mảng A


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


Input:
9
4 3 4 2 2 4 2 3 4
Output:
3 2 8

Số 3 là số lớn thứ nhì và vị trí xuất hiện của nó là vị trí 2 và 8


Phần tử là số nguyên dương xuất hiện nhiều nhất trong mảng

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

Point: 1

Nhập vào một mảng A gồm N số nguyên dương. Tìm phần tử có tần suất xuất hiện nhiều nhất trong mảng và xuất hiện bao nhiêu lần, sau đó in ra màn hình. Nếu có nhiều phần tử cùng xuất hiện nhiều nhất thì in ra phần tử nhỏ hơn.


Dòng thứ nhất Nhập N, từ dòng thứ 2 sẽ lần lượt nhập N phần tử của mảng A

In ra phần tử xuất hiện nhiều nhất và số lần xuất hiện


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


Input:
9
4 1 4 2 6 4 2 3 5
Output:
4 3

Số 4 xuất hiện nhiều nhất và xuất hiện 3 lần

Input:
6
2 3 2 3 2 3
Output:
2 3

Trò chơi thang cuốn

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

Point: 1

Tèo và Tý vào Trung tâm thương mại để mua đồ. Khi vào siêu thị, 2 bạn thấy một thang cuốn và ở các bậc thang được đánh số thứ tự từ 1 đền n, trên mỗi bậc thang có ghi một số nguyên dương. Tuy nhiên, do thang cuốn liên tục lặp lại nên các bậc thang cũng lặp lại theo đúng trật tự. Tý đố Tèo tính tổng của m bậc thang liên tiếp bắt đầu từ bậc thang thứ k, nếu Tèo tính đúng sẽ được Tý mua cho một món quà trong Trung tâm thương mại.

Hãy giúp Tèo tính toán tổng này để nhận được quà từ Tý.

Yêu cầu: Nhập vào từ bàn phím

  • Dòng thứ nhất chứa các số nguyên dương n, m, k cách nhau bởi dấu cách (~m, k ≤ 10^8; n ≤ 10^6~)

  • Và dòng thứ 2 chứa n số nguyên dương ai, a2, a3, ..., an cách nhau bởi dấu cách là các số ghi trên các bậc thang từ bậc thứ nhất đến bậc thứ n của thang cuốn. (~1 ≤ ai ≤ 10^9~)

Kết quả: In ra màn hình số nguyên dương duy nhất là kết quả bài toán chia lấy dư cho ~10^9+ 7~


Input:
6 8 3
3 4 2 1 4 5
Output:
22

Giải thích: 8 số nguyên liên tiếp bắt đầu từ vị trí số 3 là: 2 1 4 5 3 4 2 1

Kết quả: (2 + 1 + 4 + 5 + 3 + 4 + 2 + 1) mod 1000000007 = 22


Maximum Perimeter Triangle (vòng lặp for lồng nhau)

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

Point: 1

Cho một mảng có thể là độ dài 3 cạnh của 1 tam giác, sử dụng 3 giá trị bất kỳ trong mảng để tạo ra 1 tam giác, hãy cho biết 3 cạnh nào sẽ tạo thành tam giác có chu vi lớn nhất và in ra 3 cạnh thỏa mãn đó

3 cạnh thỏa mãn các điều kiện sau;

  • Có thể có nhiều tam giác có cùng chu vi, hãy in ra tam giác có cạnh dài nhất

  • Nếu có nhiều tam giác có cạnh lớn nhất có cùng chu vi thì hãy chọn tam giác có cạnh nhỏ nhất là lớn nhất

  • Nếu cả 2 tiêu chí trên đều trùng lặp thì in tam giác nào cũng được

  • Nếu không tam giác nào thỏa mãn thì in ra -1


Ràng buộc:

3 <= n <= 50

1 <= a[i] <= 10^9


Input:
5
1 1 1 3 3
Output:
1 3 3

Số lớn hơn các số đứng trước (mảng 1 chiều nâng cao)

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

Point: 1

Cho một dãy số nguyên dương có n phần tử. Hãy liệt kê số các phần tử trong dãy lớn hơn tất cả các số đứng trước nó (Phần tử đầu tiên được coi là một phần tử thỏa mãn).


Định dạng đầu vào: Dòng đầu tiên là số lượng phần tử trong mảng. Dòng thứ 2 là N phần tử trong mảng.


Ràng buộc: 2≤n≤10^6; 1≤ai≤10^9


Định dạng đầu ra: Liệt kê các số thỏa mãn


Input:
6
6 2 1 3 9 9
Output:
6 9

Gửi thư

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

Point: 1

Tất cá các thành phố của Lineland đều năm trên trục tọa độ Ox. Do đó, mỗi thành phố được liên kết với vị trí xi - tọa độ trên trục Ox. Không có hai thành phố được đặt tại một điểm. Cư dân Lineland thích gửi thư cho nhau. Một người chỉ có thể gửi thư nếu người nhận sống ở một thành phố khác. Chi phí gửi thư chính xác bằng khoảng cách giữa thành phố của người gửi và thành phố của người nhận. Đối với mỗi thành phố, hãy tính hai giá trị mini và maxi, trong đó mini là chi phí tối thiểu để gửi thư từ thành phố thứ i đến một thành phố khác và maxi là chi phí tối đa để gửi thư từ thành phố thứ i đến một số thành phố khác.


Định dạng đầu vào: Dòng đầu tiên là số nguyên dương n. Dòng thứ hai chứa chuỗi n số nguyên khác nhau x1, x2,.... xn (-10^9 <= xi <=10^9), trong đó xi là tọa độ x của thành phố thứ i. Tất cả các xi là khác biệt và theo thứ tự tăng dần.


Ràng buộc: 2 ≤ n ≤ 10^6; -10^9 ≤ xi ≤ 10^9


Input:
4
-5 -2 2 7
Output:
3 12
3 9
4 7
5 12

Đếm cặp số nguyên tố cùng nhau (mảng 1 chiều nâng cao)

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

Point: 1

Cho một dãy số nguyên dương có n phần tử. Hãy đếm các cặp số nguyên tố cùng nhau trong mảng


Định dạng đầu vào: Dòng đầu tiên là số lượng phần tử trong mảng n. Dòng thứ 2 là các phần tử ai trong mảng


Ràng buộc: 1≤n≤1000; 1≤ai≤10^9


Định dạng đầu ra: In ra số lượng cặp số nguyên tố cùng nhau trong mảng.


Input:
5
2 4 8 3 6
Output:
3

Dãy số ưu thế (mảng 1 chiều nâng cao)

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

Point: 1

Cho dãy A[] chỉ bao gồm các số nguyên dương nhưng không biết trước số phần tử của dãy. Người ta gọi dãy A[] là dãy ưu thế nếu thỏa mãn 1 trong 2 điều kiện sau đây: Dãy gọi là ưu thế chẵn nếu số phần tử của dãy là chẵn và số lượng số chẵn trong dãy nhiều hơn số lượng số lẻ. Dãy gọi là ưu thế lẻ nếu số phần tử của dãy là lẻ và số lượng số lẻ trong dãy nhiều hơn số lượng số chẵn.


Định dạng đầu vào: 1 dòng gồm các số nguyên, mỗi số cách nhau đúng một khoảng trắng, sau chữ số cuối cùng có thể có khoảng trắng.


Ràng buộc: Số lượng phần tử trong dãy không quá 10^5; 1 ≤ A[i] ≤ 10^9


Định dạng đầu ra: In ra YES nếu dãy là dãy ưu thể, ngược lại in NO.


Input:
2 2 3 5 8 10 20 88
Output:
YES

Số thao tác giúp mảng tăng dần 2

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

Point: 1

Cho dãy số A[] gồm có t phần tử. Ớ mỗi thao tác bạn có thể tăng các phần tử trong mảng lên 1 lượng là d đơn vị, hãy xác định số thao tác tối thiểu sao cho mảng trở thành một dãy tăng chặt. Ví dụ dãy 1 2 3 7 8 là một dãy tăng chặt, nhưng dãy 1 2 2 7 8 không phải là một dãy tăng chặt. Ví dụ với mảng ban đầu là 1 3 3 2 và d = 2, ta cần thực hiện thao tác thứ nhất thêm d vào phần tử thứ 3 trong mảng, mảng trở thành 1 3 5 2, ta tiếp thục thực hiện 2 thao tác thêm d vào phần tử thứ 4, mảng trở thành dãy tăng chặt là 1 3 5 6.


Định dạng đầu vào: Dòng đầu tiên là số nguyên N và số d. Dòng tiếp theo gồm N số nguyên A[i]


Ràng buộc: 1≤ N, d ≤ 10^4; 0 ≤ A[i] ≤ 10^6


Định dạng đầu ra: In ra số thao tác tối thiểu cần thực hiện để biến mảng thành dãy tăng chặt.


Input:
3 3
15 17 9
Output:
3

Chia mảng (sắp xếp)

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

Point: 1

Cho mảng A[] gồm N số nguyên không âm và số K. Nhiệm vụ của bạn là hãy chia mảng A[] thành hai mảng con có kích cỡ K và N-K sao cho hiệu giữa tổng hai mảng con là lớn nhất. Ví dụ với mảng A[] = {8, 4, 5, 2, 10}, K = 2 ta có kết quả là 17 vì mảng A[] được chia thành hai mảng (4, 2) và (8, 5,10) có hiệu của hai mảng con là 23-6=17 là lớn nhất.


Định dạng đầu vào: Dòng đầu tiên là 2 số N và K. Dòng thứ 2 là N số trong mảng A


Ràng buộc: 1 ≤ K < N ≤ 10^5; 0 ≤ A[i] ≤ 10^7


Định dạng đầu ra: In ra hiệu lớn nhất có thể.


Input:
8 3
1 1 1 1 1 1 1 1
Output:
2

Thành phố trên hệ trục tọa độ

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

Point: 1

Tất cả các thành phố của Lineland đều nằm trên trục tọa độ Ox. Do đó, mỗi thành phố được liên kết với vị trí xi - tọa độ trên trục Ox. Không có hai thành phố được đặt tại một điểm. Cư dân Lineland thích gửi thư cho nhau. Một người chỉ có thể gửi thư nếu người nhận sống ở một thành phố khác. Chi phí gửi thư chính xác bằng khoảng cách giữa thành phố của người gửi và thành phố của người nhận. Đối với mỗi thành phố, hãy tính hai giá trị mini và maxi, trong đó mini là chi phí tối thiểu để gửi thư từ thành phố thứ i đến một thành phố khác và maxi là chi phí tối đa để gửi thư từ thành phố thứ i đến một số thành phố khác.


Input: Dòng đầu tiên của đầu vào chứa số nguyên n (2<= n ≤ 10^5) - số lượng thành phố trong Lineland. Dòng thứ hai chứa chuỗi n số nguyên khác nhau x1, x2, ..., xn (-10^9<= xi <=10^9), trong đó xi là tọa độ x của thành phố thứ i. Tất cả các xi là khác biệt và theo thứ tự tăng dần.

Output: In n dòng, dòng thứ i phải chứa hai số nguyên mini, maxi, cách nhau bởi một khoảng trắng, trong đó mini là chi phí tối thiểu để gửi thư từ thành phố thứ i và maxi là chi phí tối đa để gửi thư từ thành phố thứ i.


Ví dụ:

Input:
4 
-5 -2 2 7
Ouput:
3 12
3 9
4 7
5 12

Liệt kê các phần tử có ít nhất 2 phần tử lớn hơn nó

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

Point: 1

Cho một mảng gồm n (3<=n<=10^7) số nguyên đôi một khác nhau, liệt kê các phần tử trong mảng có ít nhất 2 phần tử khác lớn hơn nó.


Ví dụ:

Input
6
1 5 4 3 2 7
Output
1 4 3 2

In ra 3 số nhỏ nhất trong mảng

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

Point: 1

Cho một mảng gồm n (3<=n<=10^7) số nguyên đôi một khác nhau, tìm và in ra 3 số nhỏ nhất trong mảng.


Ví dụ:

Input:
7
9 11 78 75 14 6 1
Ouput:
9 6 1

Loại bỏ trùng

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

Point: 1

Viết chương trình cho phép nhập vào mảng A gồm n phần tử số nguyên (n>2). Thực hiện loại bỏ các phần tử đã xuất hiện và In ra mảng kết quả.

Định dạng đầu vào:

  • Dòng đầu tiên là số phần tử của mảng

  • Dòng thứ hai là các phần tử của mảng

Định dạng đẩu ra: Mảng kết quả


INPUT:
7
1 5 10 10 5 2 3
OUTPUT:
1 5 10 2 3

Nhỏ nhất và nhỏ nhì

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

Point: 1

Viết chương trình cho phép nhập vào mảng A gồm n phần tử số nguyên (n>2). Tìm giá trị nhỏ nhất và nhỏ thứ hai và in ra.

Định dạng đầu vào:

  • Dòng đầu tiên là số phần tử của mảng
  • Dòng thứ hai là các phần tử của mảng

Định dạng đầu ra: Giá trị nhỏ nhất và giá trị nhỏ thứ hai

INPUT:
6
80 23 79 58 11 10
OUTPUT:
10 11

Đếm các phần tử xuất hiện nhiều hơn một lần và liệt kê

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

Point: 1

Viết chương trình cho phép nhập vào mảng A gồm n phần tử số nguyên (n>2). Đếm các phần tử xuất hiện nhiều hơn một lần và liệt kê.

Định dạng đầu vào:

  • Dòng đầu tiên là số phần tử của mảng
  • Dòng thứ hai là các phần tử của mảng

Định dạng đầu ra:

  • Dòng đầu tiên là số các phần tử thỏa mãn
  • Dòng thứ hai là các phần tử thõa mãn

INPUT:
7
1 5 10 10 5 2 3
OUTPUT:
2
5 10

Dãy con liên tiếp các phần tử kề nhau đều khác nhau

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

Point: 1

Cho một dãy số nguyên có n phần tử. Tìm dãy con liên tiếp có các phần tử liền kề khác nhau có độ dài lớn nhất.

Đầu vào:

  • Dòng đầu tiên là số lượng phần tử trong mảng n. (1≤n≤10^6).
  • Dòng thứ 2 là các phần tử ai trong mảng . (-10^9≤ai≤10^9).

Đầu ra: Kết quả của bài toán.


Input:
10
1 2 3 3 3 4 5 2 1 3
Output:
6

Vận dụng:

  • Tìm dãy con liên tiếp có các phần tử giống nhau có độ dài dài nhất.
  • Tìm dãy con liên tiếp có 2 phần tử liền kề nhau trái dấu có độ dài dài nhất.

Dãy tăng dài nhất

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

Point: 1

Một đoạn tăng trong một dãy số nguyên là một đoạn liên tiếp trong dãy sao cho phần từ phía sau lớn hơn phần từ phía trước. Cho dãy số với n phần tử (n không quá 100, các phần tử đều không quá 1000). Viết chương trình tìm các đoạn tăng liên tiếp trong dãy mà số phần tử là nhiều nhất.

Input: Dòng đầu ghi số bộ test. Mỗi test gồm 2 dòng, dòng đầu ghi số N là số phần tử của dãy. Dòng sau ghi N số của dãy. N không quá 100, các số trong dãy đều nguyên dương và không quá 1000.

Output: Với mỗi bộ test, ghi ra thứ tự bộ test. Sau đó là 1 dòng ghi độ dài của đoạn tăng dài nhất. Tiếp theo là một số dòng ghi lần lượt các đoạn tăng dài nhất, từ trái qua phải trong dãy ban đầu.


Ví dụ:

Input:
2
16
2 3 5 7 4 5 8 9 7 11 8 9 6 7 10 12
12
2 3 2 3 2 3 2 2 2 3 4 1
Output:
Test 1:
4
2 3 5 7
4 5 8 9
6 7 10 12
Test 2:
3
2 3 4

Đổi chỗ để sắp xếp tăng dần

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

Point: 1

Cho một dãy gồm n số nguyên dương a1, a2, a3,..., a_n là hoán vị của các số nguyên từ 1 đến n. Sử dụng các thao tác lần lượt đổi chỗ hai số ở vị trí i và j bất kỳ, hãy sắp xếp dãy ban đầu thành dãy tăng dần.


Input:

• Dòng đầu tiên chứa số nguyên dương n (n ≤ 10^5).

• Dòng tiếp theo chứa n số nguyên dương a1, a2, a3, ..., an là hoán vị của các số nguyên từ 1 đến n.

Output:

• Dòng đầu tiên in ra số k (0 ≤ k ≤ 2 x 10^5) - số lượng thao tác cần dùng.

• K dòng tiếp theo, mỗi dòng chứa hai số nguyên i, j cách nhau một khoảng trắng (1 ≤ i, j ≤ n) thể hiện một thao tác đối ai và aj cho nhau.

Có thể chứng minh được rằng luôn tồn tại cách sắp xếp thoa mãn không sử dụng quá 2 x 10^5 thao tác


Input:
4
3 4 1 2
Output:
2
1 3
2 4