按题意思路
对于一串序列:
子系列1 max1 子序列2 → max1 子序列2 子序列1 (子序列2 子序列1 组成新的子序列3
max1 子序列3,子序列3可进一步拆解, 有 max1 (子序列4 max2 子序列5)→ max1 max2 子序列5 子序列 4
如此
// Problem#: 1443
// Author#: Reid Chan
#include <iostream>
using namespace std;
void input(int* arr, int n) {
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
}
int find_max(int *arr, int b, int n) {
int max = -1, index = -1;
for (int i = b; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
index = i;
}
}
return index;
}
void copy_arr(int *p1, int *p2, int b, int m, int e, int &l) {
bool flag = true;
int i, j = 0;
for (i = 0; i < b; i++) {
if (flag && l == i) { flag = false; l = j; }
p2[j++] = p1[i];
}
for (i = m; i < e; i++) {
if (flag && l == i) { flag = false; l = j; }
p2[j++] = p1[i];
}
for (i = b; i < m; i++) {
if (flag && l == i) { flag = false; l = j; }
p2[j++] = p1[i];
}
}
int main() {
int arr[102];
int tmp[102];
int *p1, *p2, *p3;
int t, n, m;
cin >> t;
while (t--) {
p1 = arr, p2 = tmp;
cin >> n >> m;
input(p1, n);
int m_index;
for (int i = 0; i < n; i++) {
m_index = find_max(p1, i, n);
copy_arr(p1, p2, i, m_index, n, m);
if (m == i) break;
p3 = p1;
p1 = p2;
p2 = p3;
}
cout << m + 1 << endl;
}
return 0;
}