#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; } |