#include <bits/stdc++.h> #define dbg(...) fprintf(stderr, __VA_ARGS__) using namespace std; int main() { int n, k; scanf("%d %d", &n, &k); int t[n]; for (int i=0; i<n; i++) scanf("%d", &t[i]); if (k <= 1) { puts("NIE"); } else if (k == 2) { int mn[n], mx[n]; mn[0] = t[0]; for (int i=1; i<n; i++) mn[i] = min(mn[i-1], t[i]); mx[n-1] = t[n-1]; for (int i=n-2; i>=0; i--) mx[i] = max(mx[i+1], t[i]); for (int i=1; i<n; i++) { if (mn[i-1]>=mx[i]) { puts("TAK"); printf("%d\n", i); return 0; } } puts("NIE"); } else if (k == 3) { int mn = t[0], mx = t[0]; for (int i=0; i<n; i++) { mn = min(mn, t[i]); mx = max(mx, t[i]); } //dbg("[mn=%d, mx=%d]\n", mn, mx); if (t[0] == mn && t[1] == mn) { puts("TAK"); printf("1 2\n"); return 0; } if (t[n-2] == mx && t[n-1] == mx) { puts("TAK"); printf("%d %d\n", n-1, n); return 0; } for (int i=1; i<n; i++) { if (t[i] == mn) { puts("TAK"); printf("%d %d\n", i, i+1); return 0; } } if (t[0] == mx) { puts("TAK"); printf("1 2\n"); return 0; } for (int i=1; i<n-1; i++) { if (t[i] == mx) { puts("TAK"); printf("%d %d\n", i, i+1); return 0; } } puts("NIE"); } else { if (t[0] >= t[1]) { puts("TAK"); for (int i=1; i<k; i++) printf("%d ", i); printf("\n"); return 0; } for (int i=2; i<n-1; i++) { if (t[i-1] >= t[i]) { puts("TAK"); deque <int> q; q.push_back(i-1); q.push_back(i); q.push_back(i+1); for (int i=0,j=1; i<k-4; i++,j++) { if (j < q.front()) { q.push_front(j); } else if (j > q.back()) { q.push_back(j); } else { i--; } } for (int i: q) { printf("%d ", i); } printf("\n"); return 0; } } if (t[n-2] >= t[n-1]) { puts("TAK"); for (int i=n-k+1; i<n; i++) printf("%d ", i); printf("\n"); return 0; } puts("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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #include <bits/stdc++.h> #define dbg(...) fprintf(stderr, __VA_ARGS__) using namespace std; int main() { int n, k; scanf("%d %d", &n, &k); int t[n]; for (int i=0; i<n; i++) scanf("%d", &t[i]); if (k <= 1) { puts("NIE"); } else if (k == 2) { int mn[n], mx[n]; mn[0] = t[0]; for (int i=1; i<n; i++) mn[i] = min(mn[i-1], t[i]); mx[n-1] = t[n-1]; for (int i=n-2; i>=0; i--) mx[i] = max(mx[i+1], t[i]); for (int i=1; i<n; i++) { if (mn[i-1]>=mx[i]) { puts("TAK"); printf("%d\n", i); return 0; } } puts("NIE"); } else if (k == 3) { int mn = t[0], mx = t[0]; for (int i=0; i<n; i++) { mn = min(mn, t[i]); mx = max(mx, t[i]); } //dbg("[mn=%d, mx=%d]\n", mn, mx); if (t[0] == mn && t[1] == mn) { puts("TAK"); printf("1 2\n"); return 0; } if (t[n-2] == mx && t[n-1] == mx) { puts("TAK"); printf("%d %d\n", n-1, n); return 0; } for (int i=1; i<n; i++) { if (t[i] == mn) { puts("TAK"); printf("%d %d\n", i, i+1); return 0; } } if (t[0] == mx) { puts("TAK"); printf("1 2\n"); return 0; } for (int i=1; i<n-1; i++) { if (t[i] == mx) { puts("TAK"); printf("%d %d\n", i, i+1); return 0; } } puts("NIE"); } else { if (t[0] >= t[1]) { puts("TAK"); for (int i=1; i<k; i++) printf("%d ", i); printf("\n"); return 0; } for (int i=2; i<n-1; i++) { if (t[i-1] >= t[i]) { puts("TAK"); deque <int> q; q.push_back(i-1); q.push_back(i); q.push_back(i+1); for (int i=0,j=1; i<k-4; i++,j++) { if (j < q.front()) { q.push_front(j); } else if (j > q.back()) { q.push_back(j); } else { i--; } } for (int i: q) { printf("%d ", i); } printf("\n"); return 0; } } if (t[n-2] >= t[n-1]) { puts("TAK"); for (int i=n-k+1; i<n; i++) printf("%d ", i); printf("\n"); return 0; } puts("NIE"); } return 0; } |