#include <bits/stdc++.h> using namespace std; int main(){ int n,k; cin>>n>>k; int tab[n], pre[n], suf[n], minVal=INT_MAX, maxVal=INT_MIN; // bool isMonIn=1, isMonOut, isDif=0; int monBreak=-1, minIn=-1, maxIn=-1; bool isDif=0; for(int i=0;i<n;i++) cin>>tab[i]; for(int i=0;i<n;i++) minVal=min(minVal,tab[i]), maxVal=max(maxVal,tab[i]); pre[0]=tab[0], suf[n-1]=tab[n-1]; for(int i=0;i<n;i++){ if(i>0){ pre[i]=min(pre[i-1], tab[i]); suf[n-1-i]=max(suf[n-i], tab[n-i-1]); } if(i>0 && i<n-1){ if(tab[i]==minVal) minIn=i; if(tab[i]==maxVal) maxIn=i; } if(i<n-1){ if(tab[i]>=tab[i+1]) monBreak=i; } if(tab[i]!=minVal && tab[i]!=maxVal) isDif=1; } if(k>n) return cout<<"NIE\n", 0; if(k==1) return cout<<"TAK\n", 0; if(k==2){ // for(int i=0;i<n;i++) cout<<"["<<pre[i]<<", "<<suf[i]<<"] "; for(int i=0;i<n-1;i++) if(pre[i]>=suf[i+1]) return cout<<"TAK\n"<<i+1, 0; return cout<<"NIE\n", 0; } if(k==3){ // cout<<"p"<<minIn<<" "<<maxIn<<" "<<minVal<<" "<<maxVal<<endl; if(minIn!=-1) return cout<<"TAK\n"<<minIn<<" "<<minIn+1, 0; if(maxIn!=-1) return cout<<"TAK\n"<<maxIn<<" "<<maxIn+1, 0; if(maxVal==tab[0]) return cout<<"TAK\n 1 2", 0; if(isDif) return cout<<"NIE\n", 0; return cout<<"TAK\n1 2\n", 0; } if(monBreak==-1) return cout<<"NIE\n", 0; cout<<"TAK\n"; vector<bool> where(n+1, 0); where[monBreak]=where[monBreak+1]=where[monBreak+2]=1; if(monBreak==0) k++; if(monBreak+2==n) k++; k-=4; int i=1; while(k){ if(where[i]==0) where[i]=1, k--; i++; } for(int i=1;i<n;i++) if(where[i]) cout<<i<<" "; cout<<endl; // if(int i=0; 1==1){ // int i=0; // cout<<i; // } } // if(tab[0]>=tab[1])monBreak=0; // for(int i=1;i<n-2;i++) { // // if(tab[i]>=tab[i+1]) monBreak=i; // pre[i]=min(pre[i-1], tab[i]); // } // for(int i=0;i<n;i++){ // // } // pre[i]=min(pre[i-1], tab[i]); // suf[n-1-i]=max(suf[n-i], tab[i]); // isMonOut = tab[0]<tab[1] && tab[n-2]<tab[n-1]; // if(tab[n-2]>=tab[n])monBreak=n-2;
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 | #include <bits/stdc++.h> using namespace std; int main(){ int n,k; cin>>n>>k; int tab[n], pre[n], suf[n], minVal=INT_MAX, maxVal=INT_MIN; // bool isMonIn=1, isMonOut, isDif=0; int monBreak=-1, minIn=-1, maxIn=-1; bool isDif=0; for(int i=0;i<n;i++) cin>>tab[i]; for(int i=0;i<n;i++) minVal=min(minVal,tab[i]), maxVal=max(maxVal,tab[i]); pre[0]=tab[0], suf[n-1]=tab[n-1]; for(int i=0;i<n;i++){ if(i>0){ pre[i]=min(pre[i-1], tab[i]); suf[n-1-i]=max(suf[n-i], tab[n-i-1]); } if(i>0 && i<n-1){ if(tab[i]==minVal) minIn=i; if(tab[i]==maxVal) maxIn=i; } if(i<n-1){ if(tab[i]>=tab[i+1]) monBreak=i; } if(tab[i]!=minVal && tab[i]!=maxVal) isDif=1; } if(k>n) return cout<<"NIE\n", 0; if(k==1) return cout<<"TAK\n", 0; if(k==2){ // for(int i=0;i<n;i++) cout<<"["<<pre[i]<<", "<<suf[i]<<"] "; for(int i=0;i<n-1;i++) if(pre[i]>=suf[i+1]) return cout<<"TAK\n"<<i+1, 0; return cout<<"NIE\n", 0; } if(k==3){ // cout<<"p"<<minIn<<" "<<maxIn<<" "<<minVal<<" "<<maxVal<<endl; if(minIn!=-1) return cout<<"TAK\n"<<minIn<<" "<<minIn+1, 0; if(maxIn!=-1) return cout<<"TAK\n"<<maxIn<<" "<<maxIn+1, 0; if(maxVal==tab[0]) return cout<<"TAK\n 1 2", 0; if(isDif) return cout<<"NIE\n", 0; return cout<<"TAK\n1 2\n", 0; } if(monBreak==-1) return cout<<"NIE\n", 0; cout<<"TAK\n"; vector<bool> where(n+1, 0); where[monBreak]=where[monBreak+1]=where[monBreak+2]=1; if(monBreak==0) k++; if(monBreak+2==n) k++; k-=4; int i=1; while(k){ if(where[i]==0) where[i]=1, k--; i++; } for(int i=1;i<n;i++) if(where[i]) cout<<i<<" "; cout<<endl; // if(int i=0; 1==1){ // int i=0; // cout<<i; // } } // if(tab[0]>=tab[1])monBreak=0; // for(int i=1;i<n-2;i++) { // // if(tab[i]>=tab[i+1]) monBreak=i; // pre[i]=min(pre[i-1], tab[i]); // } // for(int i=0;i<n;i++){ // // } // pre[i]=min(pre[i-1], tab[i]); // suf[n-1-i]=max(suf[n-i], tab[i]); // isMonOut = tab[0]<tab[1] && tab[n-2]<tab[n-1]; // if(tab[n-2]>=tab[n])monBreak=n-2; |