#include <bits/stdc++.h> #define ll long long using namespace std; const int N = 5e5 + 5; const int inf = 1e9 + 5; int tab[N], suf[N], n, k; bitset<N> odw; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>k; k--; for(int i=1;i<=n;i++){ cin>>tab[i]; } if(k==1){ for(int i=n;i>=1;i--){ suf[i]=max(tab[i], suf[i+1]); } int mn=inf; for(int i=1;i<=n-1;i++){ mn=min(mn, tab[i]); if(mn>=suf[i+1]){ cout<<"TAK\n"<<i; return 0; } } cout<<"NIE"; return 0; } if(k==2){ int mn=inf, mx=0, idx1, idx2; for(int i=1;i<=n;i++){ if(tab[i]<=mn){ mn=tab[i]; idx1=i; } if(tab[i]>mx){ mx=tab[i]; idx2=i; } } if(idx1==1&&idx2==n){ cout<<"NIE\n"; return 0; } if(idx1!=1){ cout<<"TAK\n"; if(idx1==n){ cout<<"1 "<<n-1; return 0; } cout<<idx1-1<<" "<<idx1; return 0; } else{ cout<<"TAK\n"; if(idx2==1){ cout<<"1 "<<n-1; return 0; } cout<<idx2-1<<" "<<idx2; return 0; } } for(int i=1;i<=n-1;i++){ bool ok=true; if(tab[i]>=tab[i+1]){ ok=false; odw[i-1]=true; odw[i]=true; odw[i+1]=true; } if(ok) continue; k-=3; for(int i=1;i<=n;i++){ if(!k) break; if(!odw[i]){ odw[i]=true; k--; } } cout<<"TAK\n"; for(int i=1;i<=n;i++){ if(odw[i]) cout<<i<<" "; } 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 84 85 86 87 88 89 90 91 | #include <bits/stdc++.h> #define ll long long using namespace std; const int N = 5e5 + 5; const int inf = 1e9 + 5; int tab[N], suf[N], n, k; bitset<N> odw; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>k; k--; for(int i=1;i<=n;i++){ cin>>tab[i]; } if(k==1){ for(int i=n;i>=1;i--){ suf[i]=max(tab[i], suf[i+1]); } int mn=inf; for(int i=1;i<=n-1;i++){ mn=min(mn, tab[i]); if(mn>=suf[i+1]){ cout<<"TAK\n"<<i; return 0; } } cout<<"NIE"; return 0; } if(k==2){ int mn=inf, mx=0, idx1, idx2; for(int i=1;i<=n;i++){ if(tab[i]<=mn){ mn=tab[i]; idx1=i; } if(tab[i]>mx){ mx=tab[i]; idx2=i; } } if(idx1==1&&idx2==n){ cout<<"NIE\n"; return 0; } if(idx1!=1){ cout<<"TAK\n"; if(idx1==n){ cout<<"1 "<<n-1; return 0; } cout<<idx1-1<<" "<<idx1; return 0; } else{ cout<<"TAK\n"; if(idx2==1){ cout<<"1 "<<n-1; return 0; } cout<<idx2-1<<" "<<idx2; return 0; } } for(int i=1;i<=n-1;i++){ bool ok=true; if(tab[i]>=tab[i+1]){ ok=false; odw[i-1]=true; odw[i]=true; odw[i+1]=true; } if(ok) continue; k-=3; for(int i=1;i<=n;i++){ if(!k) break; if(!odw[i]){ odw[i]=true; k--; } } cout<<"TAK\n"; for(int i=1;i<=n;i++){ if(odw[i]) cout<<i<<" "; } return 0; } cout<<"NIE\n"; return 0; } |