#include <bits/stdc++.h>
uint32_t N, K;
int32_t ARR[500'005], PREF_MINI_L[500'005], PREF_MAXI_L[500'005], PREF_MINI_R[500'005], PREF_MAXI_R[500'005];
int32_t MAXI = INT32_MIN;
int32_t MINI = INT32_MAX;
bool OUTPUT = false;
bool X = false;
bool CUT[500'005];
void prep(){
PREF_MINI_L[1] = ARR[1];
PREF_MAXI_L[1] = ARR[1];
for (int i = 2; i <= N; ++i){
PREF_MINI_L[i] = std::min(PREF_MINI_L[i - 1], ARR[i]);
PREF_MAXI_L[i] = std::max(PREF_MAXI_L[i - 1], ARR[i]);
}
PREF_MINI_R[N] = ARR[N];
PREF_MAXI_R[N] = ARR[N];
for (int i = N - 1; i > 0; --i){
PREF_MINI_R[i] = std::min(PREF_MINI_R[i + 1], ARR[i]);
PREF_MAXI_R[i] = std::max(PREF_MAXI_R[i + 1], ARR[i]);
}
}
int main(){
std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
std::cin >> N >> K;
for (int i = 1; i <= N; ++i){
std::cin >> ARR[i];
MAXI = std::max(MAXI, ARR[i]);
MINI = std::min(MINI, ARR[i]);
}
prep();
for (int i = 1; i < N; ++i){
if (PREF_MINI_L[i] >= PREF_MAXI_R[i + 1]){
CUT[i] = true;
OUTPUT = true;
--K;
break;
}
}
if (K > 2 && !OUTPUT){
for (int i = 2; i < N; ++i){
if (PREF_MAXI_L[i - 1] <= ARR[i] && ARR[i] >= PREF_MINI_R[i + 1] && ARR[i] == MAXI){
CUT[i - 1] = CUT[i] = true;
OUTPUT = true;
K -= 2;
break;
}
if (PREF_MINI_L[i - 1] >= ARR[i] && ARR[i] <= PREF_MAXI_R[i + 1] && ARR[i] == MINI){
CUT[i - 1] = CUT[i] = true;
OUTPUT = true;
K -= 2;
break;
}
}
}
if (K > 3 && !OUTPUT){
for (int i = 2; i < N - 1; ++i){
if (PREF_MAXI_L[i - 1] <= ARR[i] && ARR[i] >= ARR[i + 1] && ARR[i + 1] <= PREF_MINI_R[i + 2]){
CUT[i - 1] = CUT[i] = CUT[i + 1] = true;
OUTPUT = true;
K -= 3;
break;
}
if (PREF_MINI_L[i - 1] >= ARR[i] && ARR[i] <= ARR[i + 1] && ARR[i + 1] >= PREF_MAXI_R[i + 2]){
CUT[i - 1] = CUT[i] = CUT[i + 1] = true;
OUTPUT = true;
K -= 3;
break;
}
}
}
if (OUTPUT){
--K;
std::cout << "TAK\n";
for (int i = 1; i <= N; ++i){
if (K && !CUT[i]){
std::cout << i << " ";
--K;
}
if (CUT[i])
std::cout << i << " ";
}
}
else{
std::cout << "NIE";
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | #include <bits/stdc++.h> uint32_t N, K; int32_t ARR[500'005], PREF_MINI_L[500'005], PREF_MAXI_L[500'005], PREF_MINI_R[500'005], PREF_MAXI_R[500'005]; int32_t MAXI = INT32_MIN; int32_t MINI = INT32_MAX; bool OUTPUT = false; bool X = false; bool CUT[500'005]; void prep(){ PREF_MINI_L[1] = ARR[1]; PREF_MAXI_L[1] = ARR[1]; for (int i = 2; i <= N; ++i){ PREF_MINI_L[i] = std::min(PREF_MINI_L[i - 1], ARR[i]); PREF_MAXI_L[i] = std::max(PREF_MAXI_L[i - 1], ARR[i]); } PREF_MINI_R[N] = ARR[N]; PREF_MAXI_R[N] = ARR[N]; for (int i = N - 1; i > 0; --i){ PREF_MINI_R[i] = std::min(PREF_MINI_R[i + 1], ARR[i]); PREF_MAXI_R[i] = std::max(PREF_MAXI_R[i + 1], ARR[i]); } } int main(){ std::iostream::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); std::cin >> N >> K; for (int i = 1; i <= N; ++i){ std::cin >> ARR[i]; MAXI = std::max(MAXI, ARR[i]); MINI = std::min(MINI, ARR[i]); } prep(); for (int i = 1; i < N; ++i){ if (PREF_MINI_L[i] >= PREF_MAXI_R[i + 1]){ CUT[i] = true; OUTPUT = true; --K; break; } } if (K > 2 && !OUTPUT){ for (int i = 2; i < N; ++i){ if (PREF_MAXI_L[i - 1] <= ARR[i] && ARR[i] >= PREF_MINI_R[i + 1] && ARR[i] == MAXI){ CUT[i - 1] = CUT[i] = true; OUTPUT = true; K -= 2; break; } if (PREF_MINI_L[i - 1] >= ARR[i] && ARR[i] <= PREF_MAXI_R[i + 1] && ARR[i] == MINI){ CUT[i - 1] = CUT[i] = true; OUTPUT = true; K -= 2; break; } } } if (K > 3 && !OUTPUT){ for (int i = 2; i < N - 1; ++i){ if (PREF_MAXI_L[i - 1] <= ARR[i] && ARR[i] >= ARR[i + 1] && ARR[i + 1] <= PREF_MINI_R[i + 2]){ CUT[i - 1] = CUT[i] = CUT[i + 1] = true; OUTPUT = true; K -= 3; break; } if (PREF_MINI_L[i - 1] >= ARR[i] && ARR[i] <= ARR[i + 1] && ARR[i + 1] >= PREF_MAXI_R[i + 2]){ CUT[i - 1] = CUT[i] = CUT[i + 1] = true; OUTPUT = true; K -= 3; break; } } } if (OUTPUT){ --K; std::cout << "TAK\n"; for (int i = 1; i <= N; ++i){ if (K && !CUT[i]){ std::cout << i << " "; --K; } if (CUT[i]) std::cout << i << " "; } } else{ std::cout << "NIE"; } return 0; } |
English