#include<bits/stdc++.h> using namespace std; int arr[500010]; int prefmin[500010]; int sufmax[500010]; vector<int> ans; int main(){ int n,k; cin >> n >> k; for(int i=0;i<n;i++){ cin >> arr[i]; } bool incr=true; for(int i=1;i<n;i++){ if(arr[i-1]>=arr[i]){ incr=false; break; } } if(incr){ cout << "NIE\n"; return 0; } prefmin[0]=arr[0]; for(int i=1;i<n;i++){ prefmin[i]=min(prefmin[i-1],arr[i]); } sufmax[n-1]=arr[n-1]; for(int i=n-2;i>=0;i--){ sufmax[i]=max(sufmax[i+1],arr[i]); } switch(k){ case 2: for(int i=n-2;i>=0;i--){ if(prefmin[i]>=sufmax[i+1]){ cout << "TAK\n" << i+1 << "\n"; return 0; } } cout << "NIE\n"; break; case 3: if(sufmax[0]==sufmax[n-1]){ for(int i=n-1;i>=1;i++){ if(prefmin[i-1]>=arr[i]){ cout << "TAK\n" << i << " " << i+1 << "\n"; return 0; } } } else { int idx=0; while(sufmax[idx]==sufmax[0]){ idx++; } if(idx==1){ cout << "TAK\n" << idx << " " << idx+1 << "\n"; } else{ cout << "TAK\n" << idx-1 << " " << idx << "\n"; } return 0; } cout << "NIE\n"; break; default: int idx=0; for(int i=1;i<n;i++){ if(arr[i-1]>=arr[i]){ idx=i; ans.push_back(i); ans.push_back(i+1); } } k-=3; int it1=1; while(k!=0){ if(it1==idx){ it1+=2; continue; } ans.push_back(it1); k--; } sort(ans.begin(),ans.end()); cout << "TAK\n"; for(int i : ans){ cout << i << " "; } cout << "\n"; break; } 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 92 93 94 95 96 97 | #include<bits/stdc++.h> using namespace std; int arr[500010]; int prefmin[500010]; int sufmax[500010]; vector<int> ans; int main(){ int n,k; cin >> n >> k; for(int i=0;i<n;i++){ cin >> arr[i]; } bool incr=true; for(int i=1;i<n;i++){ if(arr[i-1]>=arr[i]){ incr=false; break; } } if(incr){ cout << "NIE\n"; return 0; } prefmin[0]=arr[0]; for(int i=1;i<n;i++){ prefmin[i]=min(prefmin[i-1],arr[i]); } sufmax[n-1]=arr[n-1]; for(int i=n-2;i>=0;i--){ sufmax[i]=max(sufmax[i+1],arr[i]); } switch(k){ case 2: for(int i=n-2;i>=0;i--){ if(prefmin[i]>=sufmax[i+1]){ cout << "TAK\n" << i+1 << "\n"; return 0; } } cout << "NIE\n"; break; case 3: if(sufmax[0]==sufmax[n-1]){ for(int i=n-1;i>=1;i++){ if(prefmin[i-1]>=arr[i]){ cout << "TAK\n" << i << " " << i+1 << "\n"; return 0; } } } else { int idx=0; while(sufmax[idx]==sufmax[0]){ idx++; } if(idx==1){ cout << "TAK\n" << idx << " " << idx+1 << "\n"; } else{ cout << "TAK\n" << idx-1 << " " << idx << "\n"; } return 0; } cout << "NIE\n"; break; default: int idx=0; for(int i=1;i<n;i++){ if(arr[i-1]>=arr[i]){ idx=i; ans.push_back(i); ans.push_back(i+1); } } k-=3; int it1=1; while(k!=0){ if(it1==idx){ it1+=2; continue; } ans.push_back(it1); k--; } sort(ans.begin(),ans.end()); cout << "TAK\n"; for(int i : ans){ cout << i << " "; } cout << "\n"; break; } return 0; } |