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