#include <bits/stdc++.h> using namespace std; int n, k, t[500001], p, m, mxs[500002], mn = INT_MAX, mx; void in() { scanf("%d%d", &n, &k); for(int i = 1; i <= n; ++i) { scanf("%d", &t[i]); if(t[i - 1] > t[i]) p = i; mn = min(mn, t[i]); mx = max(mx, t[i]); } } void calc4() { printf("TAK\n"); m = 2; if(p > 2) ++m; if(p < n) ++m; for(int i = 1; i < p - 2 && m < k; ++i) { printf("%d ", i); ++m; } if(p > 2) printf("%d ", p - 2); printf("%d ", p - 1); if(p < n) printf("%d ", p); for(int i = p + 1; i < n && m < k; ++i) { printf("%d ", i); ++m; } } void calc3() { if(t[1] == mn && t[n] == mx) { printf("NIE"); return; } printf("TAK\n"); if(t[1] == mx) printf("1 2"); else if(t[n] == mn) printf("%d %d", n - 2, n - 1); else { for(int i = 2; i < n; ++i) { if(t[i] == mn || t[i] == mx) { printf("%d %d", i - 1, i); return; } } } } void calc2() { for(int i = n; i > 0; --i) mxs[i] = max(t[i], mxs[i + 1]); int mnp = INT_MAX; for(int i = 1; i < n; ++i) { mnp = min(mnp, t[i]); if(mnp > mxs[i + 1]) { printf("TAK\n%d", i); return; } } printf("NIE"); } int main() { in(); if(p == 0) { printf("NIE"); return 0; } if(k >= 4) calc4(); else if(k == 3) calc3(); else calc2(); }
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 | #include <bits/stdc++.h> using namespace std; int n, k, t[500001], p, m, mxs[500002], mn = INT_MAX, mx; void in() { scanf("%d%d", &n, &k); for(int i = 1; i <= n; ++i) { scanf("%d", &t[i]); if(t[i - 1] > t[i]) p = i; mn = min(mn, t[i]); mx = max(mx, t[i]); } } void calc4() { printf("TAK\n"); m = 2; if(p > 2) ++m; if(p < n) ++m; for(int i = 1; i < p - 2 && m < k; ++i) { printf("%d ", i); ++m; } if(p > 2) printf("%d ", p - 2); printf("%d ", p - 1); if(p < n) printf("%d ", p); for(int i = p + 1; i < n && m < k; ++i) { printf("%d ", i); ++m; } } void calc3() { if(t[1] == mn && t[n] == mx) { printf("NIE"); return; } printf("TAK\n"); if(t[1] == mx) printf("1 2"); else if(t[n] == mn) printf("%d %d", n - 2, n - 1); else { for(int i = 2; i < n; ++i) { if(t[i] == mn || t[i] == mx) { printf("%d %d", i - 1, i); return; } } } } void calc2() { for(int i = n; i > 0; --i) mxs[i] = max(t[i], mxs[i + 1]); int mnp = INT_MAX; for(int i = 1; i < n; ++i) { mnp = min(mnp, t[i]); if(mnp > mxs[i + 1]) { printf("TAK\n%d", i); return; } } printf("NIE"); } int main() { in(); if(p == 0) { printf("NIE"); return 0; } if(k >= 4) calc4(); else if(k == 3) calc3(); else calc2(); } |