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