// Author: Bartek Knapik
#include <cstdio>
int n, k;
int a[500009];
int pre_min[500009];
int post_max[500009];
inline int check()
{
for (int i = 1; i < n; ++i)
if (a[i] <= a[i - 1])
return i;
return -1;
}
int main()
{
scanf("%d%d", &n, &k);
for (int i = 0; i < n; ++i)
scanf("%d", &a[i]);
int drop = check();
if (drop == -1)
printf("NIE\n");
else
{
if (k == 2)
{
pre_min[1] = a[0];
post_max[n - 1] = a[n - 1];
for (int i = 1; i < n; ++i)
pre_min[i + 1] = a[i] < pre_min[i] ? a[i] : pre_min[i];
for (int i = n - 1; i > 0; --i)
post_max[i - 1] = a[i - 1] > post_max[i] ? a[i - 1] : post_max[i];
int ans = -1;
for (int i = 1; i < n; ++i)
if (pre_min[i] >= post_max[i])
{
ans = i;
break;
}
if (ans != -1)
printf("TAK\n%d\n", ans);
else
printf("NIE\n");
}
else if (k == 3)
{
int i0;
for (i0 = 1; i0 < n && a[0] < a[i0]; ++i0);
int i1;
for (i1 = n - 2; i1 >= 0 && a[i1] < a[n - 1]; --i1);
if (i0 < n - 1)
printf("TAK\n%d %d\n", i0, i0 + 1);
else if (i1 >= 0)
printf("TAK\n%d %d\n", i1, i1 + 1);
else printf("NIE\n");
}
else
{
printf("TAK\n");
if (drop == n - 1)
{
for (int i = 1; i <= k - 3; ++i)
printf("%d ", i);
printf("%d %d\n", drop - 1, drop);
}
else if (drop == 1)
{
int to_print = k - 3;
printf("%d %d ", drop, drop + 1);
for (int i = drop + 2; to_print; ++i)
{
to_print--;
printf("%d ", i);
}
printf("\n");
}
else
{
int to_print = k - 4;
for (int i = 1; to_print && i < drop - 1; ++i)
{
to_print--;
printf("%d ", i);
}
printf("%d %d %d ", drop - 1, drop, drop + 1);
for (int i = drop + 2; to_print; ++i)
{
to_print--;
printf("%d ", i);
}
printf("\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 | // Author: Bartek Knapik #include <cstdio> int n, k; int a[500009]; int pre_min[500009]; int post_max[500009]; inline int check() { for (int i = 1; i < n; ++i) if (a[i] <= a[i - 1]) return i; return -1; } int main() { scanf("%d%d", &n, &k); for (int i = 0; i < n; ++i) scanf("%d", &a[i]); int drop = check(); if (drop == -1) printf("NIE\n"); else { if (k == 2) { pre_min[1] = a[0]; post_max[n - 1] = a[n - 1]; for (int i = 1; i < n; ++i) pre_min[i + 1] = a[i] < pre_min[i] ? a[i] : pre_min[i]; for (int i = n - 1; i > 0; --i) post_max[i - 1] = a[i - 1] > post_max[i] ? a[i - 1] : post_max[i]; int ans = -1; for (int i = 1; i < n; ++i) if (pre_min[i] >= post_max[i]) { ans = i; break; } if (ans != -1) printf("TAK\n%d\n", ans); else printf("NIE\n"); } else if (k == 3) { int i0; for (i0 = 1; i0 < n && a[0] < a[i0]; ++i0); int i1; for (i1 = n - 2; i1 >= 0 && a[i1] < a[n - 1]; --i1); if (i0 < n - 1) printf("TAK\n%d %d\n", i0, i0 + 1); else if (i1 >= 0) printf("TAK\n%d %d\n", i1, i1 + 1); else printf("NIE\n"); } else { printf("TAK\n"); if (drop == n - 1) { for (int i = 1; i <= k - 3; ++i) printf("%d ", i); printf("%d %d\n", drop - 1, drop); } else if (drop == 1) { int to_print = k - 3; printf("%d %d ", drop, drop + 1); for (int i = drop + 2; to_print; ++i) { to_print--; printf("%d ", i); } printf("\n"); } else { int to_print = k - 4; for (int i = 1; to_print && i < drop - 1; ++i) { to_print--; printf("%d ", i); } printf("%d %d %d ", drop - 1, drop, drop + 1); for (int i = drop + 2; to_print; ++i) { to_print--; printf("%d ", i); } printf("\n"); } } } return 0; } |
English