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