#include <bits/stdc++.h> using namespace std; const int M = 500000+100; int k, n, a, b; bool res; int seq[M]; int prefMin[M]; int sufMax[M]; int main() { const bool debug = false; if (!debug) { ios_base::sync_with_stdio(0); cin.tie(0); } cin >> n >> k; res = false; if (k == 2) { res = false; for (int i = 0; i <= n + 10; ++i) { prefMin[i] = INT_MAX; sufMax[i] = INT_MIN; } for (int i = 1; i <= n; ++i) { cin >> seq[i]; prefMin[i] = min(prefMin[i - 1], seq[i]); } for (int i = n; i > 0; --i) { sufMax[i] = max(sufMax[i + 1], seq[i]); } for (int i = 1; i < n; ++i) { if (!(prefMin[i] < sufMax[i + 1])) { res = true; a = i; break; } } if (res) cout << "TAK\n" << a << "\n"; else cout << "NIE\n"; } else if (k == 3) { if (n == 3) { res = !(seq[1] < seq[2] && seq[2] < seq[3]); if (res) cout << "TAK\n1 2"; else cout << "NIE\n"; return 0; } res = false; for (int i = 0; i <= n + 10; ++i) { prefMin[i] = INT_MAX; sufMax[i] = INT_MIN; } for (int i = 1; i <= n; ++i) { cin >> seq[i]; prefMin[i] = min(prefMin[i - 1], seq[i]); } for (int i = n; i > 0; --i) { sufMax[i] = max(sufMax[i + 1], seq[i]); } for (int i = 1; i <= n - 2; ++i) { if (debug) cout << i << " " << prefMin[i] << " " << " " << seq[i+1]<<" " << sufMax[i+2] << "\n"; if (!(prefMin[i] < seq[i + 1] && seq[i + 1] < sufMax[i + 2])) { res = true; a = i; b = i + 1; break; } } if (res) { cout << "TAK\n" << a << " " << b; } else cout << "NIE\n"; } else { // check if sorted for (int i = 1; i <= n; ++i) { cin >> seq[i]; if (i > 1 && seq[i] <= seq[i - 1] && !res) { res = true; a = i; b = i - 1; } } if (res) { cout << "TAK\n"; if (a == 2) { for (int i = 1; i < k; ++i) cout << i << " "; } else { int i; for (i = 1; i + 2 < k && i < a; ++i) cout << i << " "; if (b > i) cout << b << " " << a << " "; else cout << a << " "; for (i = a + 1; i + a < k; ++i) cout << i << " "; } } else cout << "NIE\n"; } 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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | #include <bits/stdc++.h> using namespace std; const int M = 500000+100; int k, n, a, b; bool res; int seq[M]; int prefMin[M]; int sufMax[M]; int main() { const bool debug = false; if (!debug) { ios_base::sync_with_stdio(0); cin.tie(0); } cin >> n >> k; res = false; if (k == 2) { res = false; for (int i = 0; i <= n + 10; ++i) { prefMin[i] = INT_MAX; sufMax[i] = INT_MIN; } for (int i = 1; i <= n; ++i) { cin >> seq[i]; prefMin[i] = min(prefMin[i - 1], seq[i]); } for (int i = n; i > 0; --i) { sufMax[i] = max(sufMax[i + 1], seq[i]); } for (int i = 1; i < n; ++i) { if (!(prefMin[i] < sufMax[i + 1])) { res = true; a = i; break; } } if (res) cout << "TAK\n" << a << "\n"; else cout << "NIE\n"; } else if (k == 3) { if (n == 3) { res = !(seq[1] < seq[2] && seq[2] < seq[3]); if (res) cout << "TAK\n1 2"; else cout << "NIE\n"; return 0; } res = false; for (int i = 0; i <= n + 10; ++i) { prefMin[i] = INT_MAX; sufMax[i] = INT_MIN; } for (int i = 1; i <= n; ++i) { cin >> seq[i]; prefMin[i] = min(prefMin[i - 1], seq[i]); } for (int i = n; i > 0; --i) { sufMax[i] = max(sufMax[i + 1], seq[i]); } for (int i = 1; i <= n - 2; ++i) { if (debug) cout << i << " " << prefMin[i] << " " << " " << seq[i+1]<<" " << sufMax[i+2] << "\n"; if (!(prefMin[i] < seq[i + 1] && seq[i + 1] < sufMax[i + 2])) { res = true; a = i; b = i + 1; break; } } if (res) { cout << "TAK\n" << a << " " << b; } else cout << "NIE\n"; } else { // check if sorted for (int i = 1; i <= n; ++i) { cin >> seq[i]; if (i > 1 && seq[i] <= seq[i - 1] && !res) { res = true; a = i; b = i - 1; } } if (res) { cout << "TAK\n"; if (a == 2) { for (int i = 1; i < k; ++i) cout << i << " "; } else { int i; for (i = 1; i + 2 < k && i < a; ++i) cout << i << " "; if (b > i) cout << b << " " << a << " "; else cout << a << " "; for (i = a + 1; i + a < k; ++i) cout << i << " "; } } else cout << "NIE\n"; } return 0; } |