#include <bits/stdc++.h> #define f first #define s second #define vec vector #define pb push_back #define sz(x) (int)(x).size() #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() template<class T> bool umin(T &a ,const T &b){return (a>b?a=b,1:0);} template<class T> bool umax(T &a ,const T &b){return (a<b?a=b,1:0);} using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef long double ld; auto rng=bind(uniform_int_distribution<ll>(1,(ll)1e18),mt19937(time(0))); const int inf = (int)1e9 + 1; const int N = 5e5 + 1; //int t[4 * N]; int a[N]; // //void build (int v, int tl, int tr) { // if (tl == tr) { // t[v] = a[tl]; // } // else { // int tm = (tl + tr) >> 1; // build(v << 1, tl, tm); // build(v << 1 | 1, tm + 1, tr); // t[v] = max(t[v << 1], t[v << 1 | 1]); // } //} //int getpos (int i, int x, int v, int tl, int tr) { // if (tr <= i || t[v] < x) // return -1; // if (tl == tr) // return tl; // int tm = (tl + tr) >> 1; // int j = getpos(i, x, v << 1, tl, tm); // if (j == -1) // j = getpos(i, x, v << 1 | 1, tm + 1, tr); // return j; //} signed main(){ ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n, k; cin >> n >> k; for (int i = 0; i < n; ++i) { cin >> a[i]; } vec<int> ans; --k; vec<int> pref(n),suf(n); for (int i = 0; i < n; ++i) pref[i] = (i ? min(a[i], pref[i - 1]) : a[i]); for (int i = n - 1; i >= 0; --i) suf[i] = (i + 1 < n ? max(a[i], suf[i + 1]) : a[i]); // build(1, 0, n - 1); if (k == 1) { for (int i = 0; i < n - 1; ++i) { if (!sz(ans) && pref[i] >= suf[i + 1]) { ans.pb(i); } } } else { vec<bool> inans(n); int ok = 0; int j = -1; for (int i = 1; i < n - 1; ++i) { if (ok == 0 && (a[i] <= pref[i - 1] || a[i] >= suf[i + 1])) { inans[i - 1] = 1; inans[i] = 1; ok = 1; j = i; // ans.pb(i - 1); // ans.pb(i); } } // if (sz(ans) == 0) { // // } for (int i = 0; i < n; ++i) { // if (i == j) int cur = sz(ans) + (i < (j - 1)) + (i < j); // cout if (inans[i]) { ans.pb(i); } if (!inans[i] && k != cur){ ans.pb(i); } } // ///then add } if (!sz(ans)) { cout << "NIE\n"; } else { cout << "TAK\n"; for (auto &z : ans) cout << z + 1 << ' '; } return 0; } /* 6 6 3 5 4 8 3 7 1 2 1 7 2 18 7 9 3 18 5 17 3 8 14 18 4 7 7 17 3 20 1 18 4 11 10 11 */
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 117 118 119 120 121 122 123 124 125 126 127 | #include <bits/stdc++.h> #define f first #define s second #define vec vector #define pb push_back #define sz(x) (int)(x).size() #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() template<class T> bool umin(T &a ,const T &b){return (a>b?a=b,1:0);} template<class T> bool umax(T &a ,const T &b){return (a<b?a=b,1:0);} using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef long double ld; auto rng=bind(uniform_int_distribution<ll>(1,(ll)1e18),mt19937(time(0))); const int inf = (int)1e9 + 1; const int N = 5e5 + 1; //int t[4 * N]; int a[N]; // //void build (int v, int tl, int tr) { // if (tl == tr) { // t[v] = a[tl]; // } // else { // int tm = (tl + tr) >> 1; // build(v << 1, tl, tm); // build(v << 1 | 1, tm + 1, tr); // t[v] = max(t[v << 1], t[v << 1 | 1]); // } //} //int getpos (int i, int x, int v, int tl, int tr) { // if (tr <= i || t[v] < x) // return -1; // if (tl == tr) // return tl; // int tm = (tl + tr) >> 1; // int j = getpos(i, x, v << 1, tl, tm); // if (j == -1) // j = getpos(i, x, v << 1 | 1, tm + 1, tr); // return j; //} signed main(){ ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n, k; cin >> n >> k; for (int i = 0; i < n; ++i) { cin >> a[i]; } vec<int> ans; --k; vec<int> pref(n),suf(n); for (int i = 0; i < n; ++i) pref[i] = (i ? min(a[i], pref[i - 1]) : a[i]); for (int i = n - 1; i >= 0; --i) suf[i] = (i + 1 < n ? max(a[i], suf[i + 1]) : a[i]); // build(1, 0, n - 1); if (k == 1) { for (int i = 0; i < n - 1; ++i) { if (!sz(ans) && pref[i] >= suf[i + 1]) { ans.pb(i); } } } else { vec<bool> inans(n); int ok = 0; int j = -1; for (int i = 1; i < n - 1; ++i) { if (ok == 0 && (a[i] <= pref[i - 1] || a[i] >= suf[i + 1])) { inans[i - 1] = 1; inans[i] = 1; ok = 1; j = i; // ans.pb(i - 1); // ans.pb(i); } } // if (sz(ans) == 0) { // // } for (int i = 0; i < n; ++i) { // if (i == j) int cur = sz(ans) + (i < (j - 1)) + (i < j); // cout if (inans[i]) { ans.pb(i); } if (!inans[i] && k != cur){ ans.pb(i); } } // ///then add } if (!sz(ans)) { cout << "NIE\n"; } else { cout << "TAK\n"; for (auto &z : ans) cout << z + 1 << ' '; } return 0; } /* 6 6 3 5 4 8 3 7 1 2 1 7 2 18 7 9 3 18 5 17 3 8 14 18 4 7 7 17 3 20 1 18 4 11 10 11 */ |