#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 */ |
English