#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=1000100;
int a[N];
int mx[N];
bool R[N];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int n,k;cin>>n>>k;
for (int i=1;i<=n;i++) cin>>a[i];
bool ok=true;
for (int i=2;i<=n;i++) ok&=(a[i]>a[i-1]);
if (ok){
cout<<"NIE\n";
return 0;
}
if (k>=3){
int mn=1000000001;
int mx=0;
for (int i=1;i<=n;i++){
mx=max(mx,a[i]);
mn=min(mn,a[i]);
}
int pos_mn=0,pos_mx=0;
for (int i=1;i<=n;i++){
if (a[i]==mn) pos_mn=i;
if (a[i]==mx && !pos_mx) pos_mx=i;
}
if (pos_mn==1 && pos_mx==n ){
if (k==3){
cout<<"NIE\n";
return 0;
}
for (int i=2;i<n;i++){
if (a[i]>a[i-1]) continue;
R[i-1]=true;
R[i]=true;
R[i-2]=true;
R[n]=true;
break;
}
} else {
if (pos_mn>1){
R[pos_mn]=true;
R[pos_mn-1]=true;
} else {
R[pos_mx]=true;
R[pos_mx-1]=true;
}
R[n]=true;
}
for (int i=1;i<=n;i++) k-=R[i];
// cout<<pos_mn<<" "<<pos_mx<<" "<<k<<endl;
for (int i=1;i<=n && k>0;i++){
if (R[i]) continue;
// cout<<"A "<<i<<endl;
R[i]=true;
k--;
}
cout<<"TAK\n";
for (int i=1;i<n;i++){
if (R[i]) cout<<i<<" ";
}
cout<<endl;
return 0;
}
mx[n+1]=0;
for (int i=n;i>=1;i--) mx[i]=max(mx[i+1],a[i]);
int mn=a[1];
for (int i=1;i<n;i++){
mn=min(mn,a[i]);
if (mn>mx[i+1]){
cout<<"TAK\n";
cout<<i<<endl;
return 0;
}
}
cout<<"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 | #include<bits/stdc++.h> typedef long long ll; using namespace std; const int N=1000100; int a[N]; int mx[N]; bool R[N]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n,k;cin>>n>>k; for (int i=1;i<=n;i++) cin>>a[i]; bool ok=true; for (int i=2;i<=n;i++) ok&=(a[i]>a[i-1]); if (ok){ cout<<"NIE\n"; return 0; } if (k>=3){ int mn=1000000001; int mx=0; for (int i=1;i<=n;i++){ mx=max(mx,a[i]); mn=min(mn,a[i]); } int pos_mn=0,pos_mx=0; for (int i=1;i<=n;i++){ if (a[i]==mn) pos_mn=i; if (a[i]==mx && !pos_mx) pos_mx=i; } if (pos_mn==1 && pos_mx==n ){ if (k==3){ cout<<"NIE\n"; return 0; } for (int i=2;i<n;i++){ if (a[i]>a[i-1]) continue; R[i-1]=true; R[i]=true; R[i-2]=true; R[n]=true; break; } } else { if (pos_mn>1){ R[pos_mn]=true; R[pos_mn-1]=true; } else { R[pos_mx]=true; R[pos_mx-1]=true; } R[n]=true; } for (int i=1;i<=n;i++) k-=R[i]; // cout<<pos_mn<<" "<<pos_mx<<" "<<k<<endl; for (int i=1;i<=n && k>0;i++){ if (R[i]) continue; // cout<<"A "<<i<<endl; R[i]=true; k--; } cout<<"TAK\n"; for (int i=1;i<n;i++){ if (R[i]) cout<<i<<" "; } cout<<endl; return 0; } mx[n+1]=0; for (int i=n;i>=1;i--) mx[i]=max(mx[i+1],a[i]); int mn=a[1]; for (int i=1;i<n;i++){ mn=min(mn,a[i]); if (mn>mx[i+1]){ cout<<"TAK\n"; cout<<i<<endl; return 0; } } cout<<"NIE\n"; return 0; } |
English