#include <iostream> #include <algorithm> #include <vector> #include <set> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n >> k; vector<int> V(n); for (auto& v : V) cin >> v; bool is_ok = false; for (int i = 0; i < n - 1; i++) if (V[i] >= V[i + 1]) is_ok = true; if (!is_ok) { cout << "NIE"; exit(0); } if (k == 2) { vector<int> MinP(n + 1, INT32_MAX), MaxS(n + 1); for (int i = 0; i < n; i++) MinP[i + 1] = min(MinP[i], V[i]); for (int i = n - 1; i >= 0; i--) MaxS[i] = max(MaxS[i + 1], V[i]); for (int i = 0; i < n - 1; i++) { if (MinP[i + 1] >= MaxS[i + 1]) { cout << "TAK\n" << i + 1; exit(0); } } cout << "NIE"; } else if (k == 3) { int m = *min_element(V.begin(), V.end()); int M = *max_element(V.begin(), V.end()); if (V.front() == M) cout << "TAK\n1 2"; else if (V.back() == m) cout << "TAK\n1" << n - 1; else { for (int i = 1; i < n - 1; i++) { if (V[i] == m || V[i] == M) { cout << "TAK\n" << i << ' ' << i + 1; exit(0); } } cout << "NIE"; } } else { set<int> S; for (int i = 0; i < n - 1; i++) { if (V[i] >= V[i + 1]) { if (i != 0) S.insert(i - 1); S.insert(i); if (i != n - 2) S.insert(i + 1); break; } } if (S.size()) { cout << "TAK\n"; for (int i = 0; i < n; i++) { if (S.size() == k - 1) break; S.insert(i); } for (auto& s : S) cout << s + 1 << ' '; } else cout << "NIE"; } }
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 | #include <iostream> #include <algorithm> #include <vector> #include <set> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n >> k; vector<int> V(n); for (auto& v : V) cin >> v; bool is_ok = false; for (int i = 0; i < n - 1; i++) if (V[i] >= V[i + 1]) is_ok = true; if (!is_ok) { cout << "NIE"; exit(0); } if (k == 2) { vector<int> MinP(n + 1, INT32_MAX), MaxS(n + 1); for (int i = 0; i < n; i++) MinP[i + 1] = min(MinP[i], V[i]); for (int i = n - 1; i >= 0; i--) MaxS[i] = max(MaxS[i + 1], V[i]); for (int i = 0; i < n - 1; i++) { if (MinP[i + 1] >= MaxS[i + 1]) { cout << "TAK\n" << i + 1; exit(0); } } cout << "NIE"; } else if (k == 3) { int m = *min_element(V.begin(), V.end()); int M = *max_element(V.begin(), V.end()); if (V.front() == M) cout << "TAK\n1 2"; else if (V.back() == m) cout << "TAK\n1" << n - 1; else { for (int i = 1; i < n - 1; i++) { if (V[i] == m || V[i] == M) { cout << "TAK\n" << i << ' ' << i + 1; exit(0); } } cout << "NIE"; } } else { set<int> S; for (int i = 0; i < n - 1; i++) { if (V[i] >= V[i + 1]) { if (i != 0) S.insert(i - 1); S.insert(i); if (i != n - 2) S.insert(i + 1); break; } } if (S.size()) { cout << "TAK\n"; for (int i = 0; i < n; i++) { if (S.size() == k - 1) break; S.insert(i); } for (auto& s : S) cout << s + 1 << ' '; } else cout << "NIE"; } } |