Cho mảng arr[]. Đếm mảng con (độ dài ≥ 1) không tăng (mỗi phần tử ≤ phần tử trước).
Ý tưởng
- Duyệt mảng, đếm độ dài đoạn không tăng liên tiếp
len. - Khi gặp phần tử tăng, cộng
len*(len+1)/2vào kết quả (số mảng con của đoạn đó), resetlen = 1. - Cuối mảng xử lý đoạn cuối.
Ví dụ hoàn chỉnh
#include <bits/stdc++.h>
using namespace std;
int subarrays(int arr[], int size) {
int count = 0;
int len = 1;
for (int i = 0; i < size - 1; ++i) {
if (arr[i + 1] <= arr[i])
len++;
else {
count += (len * (len + 1)) / 2;
len = 1;
}
}
if (len > 1)
count += (len * (len + 1)) / 2;
return count;
}
int main() {
int arr[] = {2, 6, 1, 8, 3};
int size = sizeof(arr) / sizeof(arr[0]);
cout << "Số mảng con không tăng: " << subarrays(arr, size);
return 0;
}
Kết quả
Số mảng con không tăng: 7