#include <bits/stdc++.h>
using namespace std;
int a[500001];
int minp[500001];
int maxs[500001];
int main() {
int n, k;
scanf("%d", &n);
scanf("%d", &k);
for (int i = 0; i < n; i++) scanf("%d", a+i);
if(k >= 4) {
for(int i=1; i<n; ++i)
if(a[i] <= a[i-1]) {
printf("TAK\n");
if(k >= i+2)
for(int j=1; j < k; ++j) printf("%d ",j);
else {
if(i+1==n) for(int j=i+3-k-1; j<=i; ++j) printf("%d ",j);
else
for(int j=i+3-k; j<=i+1; ++j) printf("%d ",j);
}
printf("\n");
return 0;
}
printf("NIE\n");
return 0;
}
if(k==3) {
int maxx=-1; int first_pos_max=n;
for(int i=n-1; i>=0; --i)
if(a[i]>=maxx) {
maxx=a[i];
first_pos_max=i;
}
if(first_pos_max < n-1) {
printf("TAK\n");
if(first_pos_max==0) {
printf("%d %d\n",1,2);
return 0;
}
printf("%d %d\n",first_pos_max,first_pos_max+1);
return 0;
}
int minn=1000000001; int last_pos_min=-1;
for(int i=0; i<n; ++i)
if(a[i]<=minn) {
minn=a[i];
last_pos_min=i;
}
if(last_pos_min > 0) {
printf("TAK\n");
if(last_pos_min==n-1) {
printf("%d %d\n",last_pos_min-1,last_pos_min);
return 0;
}
printf("%d %d\n",last_pos_min,last_pos_min+1);
return 0;
}
printf("NIE\n");
return 0;
}
// k==2
minp[0]=a[0];
for(int i=1; i<n; ++i) minp[i]=min(minp[i-1],a[i]);
maxs[n-1]=a[n-1];
for(int i=n-2; i>=0; i--) maxs[i]=max(maxs[i+1],a[i]);
for(int i=0; i<n-1; ++i)
if(maxs[i+1] <= minp[i]) {
printf("TAK\n");
printf("%d\n",i+1);
return 0;
}
printf("NIE\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 | #include <bits/stdc++.h> using namespace std; int a[500001]; int minp[500001]; int maxs[500001]; int main() { int n, k; scanf("%d", &n); scanf("%d", &k); for (int i = 0; i < n; i++) scanf("%d", a+i); if(k >= 4) { for(int i=1; i<n; ++i) if(a[i] <= a[i-1]) { printf("TAK\n"); if(k >= i+2) for(int j=1; j < k; ++j) printf("%d ",j); else { if(i+1==n) for(int j=i+3-k-1; j<=i; ++j) printf("%d ",j); else for(int j=i+3-k; j<=i+1; ++j) printf("%d ",j); } printf("\n"); return 0; } printf("NIE\n"); return 0; } if(k==3) { int maxx=-1; int first_pos_max=n; for(int i=n-1; i>=0; --i) if(a[i]>=maxx) { maxx=a[i]; first_pos_max=i; } if(first_pos_max < n-1) { printf("TAK\n"); if(first_pos_max==0) { printf("%d %d\n",1,2); return 0; } printf("%d %d\n",first_pos_max,first_pos_max+1); return 0; } int minn=1000000001; int last_pos_min=-1; for(int i=0; i<n; ++i) if(a[i]<=minn) { minn=a[i]; last_pos_min=i; } if(last_pos_min > 0) { printf("TAK\n"); if(last_pos_min==n-1) { printf("%d %d\n",last_pos_min-1,last_pos_min); return 0; } printf("%d %d\n",last_pos_min,last_pos_min+1); return 0; } printf("NIE\n"); return 0; } // k==2 minp[0]=a[0]; for(int i=1; i<n; ++i) minp[i]=min(minp[i-1],a[i]); maxs[n-1]=a[n-1]; for(int i=n-2; i>=0; i--) maxs[i]=max(maxs[i+1],a[i]); for(int i=0; i<n-1; ++i) if(maxs[i+1] <= minp[i]) { printf("TAK\n"); printf("%d\n",i+1); return 0; } printf("NIE\n"); return 0; } |
English