#include <bits/stdc++.h> using namespace std; const int N = 5e5+7; int A[N],pref[N]; bool vis[N]; void solve(){ int n,k; cin>>n>>k; for(int i = 1;i<=n;i+=1){ cin>>A[i]; } if (k==2){ for(int i = 1;i<=n;i+=1){ if (i>1){ pref[i] = pref[i-1]; } else{ pref[i] = A[i]; } pref[i] = min(pref[i],A[i]); } int mx; for(int i = n;i>1;i-=1){ if (i==n){ mx = A[i]; } mx = max(mx,A[i]); if (mx<=pref[i-1]){ cout<<"TAK\n"; cout<<i-1<<endl; return; } } cout<<"NIE\n"; return; } if (k==3){ int mx = A[1]; int frs = 1; for(int i = 2;i<=n;i+=1){ if (mx<A[i]){ mx = A[i]; frs = i; } } if (frs!=n){ cout<<"TAK\n"; if (frs==1){ cout<<1<<' '<<2<<endl; } else{ cout<<frs-1<<' '<<frs<<endl; } return; } int mi = A[n]; frs = n; for(int i = n-1;i>=1;i-=1){ if (A[i]<mi){ mi = A[i]; frs = i; } } if (frs!=1){ cout<<"TAK\n"; if (frs==n){ cout<<1<<' '<<n-1<<endl; } else{ cout<<frs-1<<' '<<frs<<endl; } return; } cout<<"NIE\n"; return; } if (k>=4){ vector<int> ans; int pos = -1; for(int i = 1;i<n;i+=1){ if (A[i]>=A[i+1]){ pos = i; break; } } if (pos==-1){ cout<<"NIE\n"; return; } vis[pos] = 1; vis[pos+1] = 1; k -= 3-((pos+1)==n); if (pos-1>=1){ vis[pos-1] = 1; k -= 1; } for(int i = 1;i<=n && k>0;i+=1){ if (!vis[i]){ vis[i] = 1; k -= 1; } } cout<<"TAK\n"; for(int i = 1;i<n;i+=1){ if (vis[i]){ cout<<i<<' '; } } cout<<endl; } } signed main(){ int tt = 1; while(tt--){ solve(); } }
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 | #include <bits/stdc++.h> using namespace std; const int N = 5e5+7; int A[N],pref[N]; bool vis[N]; void solve(){ int n,k; cin>>n>>k; for(int i = 1;i<=n;i+=1){ cin>>A[i]; } if (k==2){ for(int i = 1;i<=n;i+=1){ if (i>1){ pref[i] = pref[i-1]; } else{ pref[i] = A[i]; } pref[i] = min(pref[i],A[i]); } int mx; for(int i = n;i>1;i-=1){ if (i==n){ mx = A[i]; } mx = max(mx,A[i]); if (mx<=pref[i-1]){ cout<<"TAK\n"; cout<<i-1<<endl; return; } } cout<<"NIE\n"; return; } if (k==3){ int mx = A[1]; int frs = 1; for(int i = 2;i<=n;i+=1){ if (mx<A[i]){ mx = A[i]; frs = i; } } if (frs!=n){ cout<<"TAK\n"; if (frs==1){ cout<<1<<' '<<2<<endl; } else{ cout<<frs-1<<' '<<frs<<endl; } return; } int mi = A[n]; frs = n; for(int i = n-1;i>=1;i-=1){ if (A[i]<mi){ mi = A[i]; frs = i; } } if (frs!=1){ cout<<"TAK\n"; if (frs==n){ cout<<1<<' '<<n-1<<endl; } else{ cout<<frs-1<<' '<<frs<<endl; } return; } cout<<"NIE\n"; return; } if (k>=4){ vector<int> ans; int pos = -1; for(int i = 1;i<n;i+=1){ if (A[i]>=A[i+1]){ pos = i; break; } } if (pos==-1){ cout<<"NIE\n"; return; } vis[pos] = 1; vis[pos+1] = 1; k -= 3-((pos+1)==n); if (pos-1>=1){ vis[pos-1] = 1; k -= 1; } for(int i = 1;i<=n && k>0;i+=1){ if (!vis[i]){ vis[i] = 1; k -= 1; } } cout<<"TAK\n"; for(int i = 1;i<n;i+=1){ if (vis[i]){ cout<<i<<' '; } } cout<<endl; } } signed main(){ int tt = 1; while(tt--){ solve(); } } |