#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(); } |
English