#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5e5+5;
const int INF = 1e9+7;
ll tab[N],A[N],B[N];
bool division[N];
int main(){
ios_base::sync_with_stdio(0);
ll n,k,mini=INF,maxi=-INF;
cin >> n >> k;
for(int i=1; i<=n; ++i){
cin >> tab[i];
maxi = max(maxi, tab[i]);
mini = min(mini, tab[i]);
}
--k;
if(k>=3){
int x=-1;
for(int i=1; i<=n-1; ++i){
if(tab[i] >= tab[i+1]){
x = i;
division[i] = 1;
--k;
if(k>0 && i!=1){
division[i-1] = 1;
--k;
}
if(k>0 && i!=n-1){
division[i+1] = 1;
--k;
}
break;
}
}
if(x==-1){
cout << "NIE";
return 0;
}
cout << "TAK\n";
for(int i=1; i<=n&&k>0; ++i){
if(!division[i]){
division[i] = 1;
--k;
}
}
for(int i=1; i<=n; ++i)
if(division[i]) cout << i << ' ';
}else if(k==2){ // Szukamy ekstremalne elementy
bool jestMinGdzies=0,jestMaxGdzies=0;
for(int i=2; i<=n; ++i){
if(mini == tab[i]){
jestMinGdzies = 1;
division[i] = 1;
division[i-1] = 1;
k-=2;
break;
}
}
if(k==2){
for(int i=2; i<=n-1; ++i){
if(maxi == tab[i]){
jestMaxGdzies = 1;
division[i] = 1;
division[i-1] = 1;
k-=2;
break;
}
}
}
if(!jestMinGdzies && !jestMaxGdzies){
cout << "NIE";
return 0;
}
cout << "TAK\n";
for(int i=1; i<=n; ++i){
if(division[i]) cout << i << ' ';
}
}else{ // k==1
A[0] = +INF;
for(int i=1; i<=n; ++i){
A[i] = min(tab[i],A[i-1]);
}
B[n+1] = -INF;
for(int i=n; i>=1; --i){
B[i] = max(tab[i],B[i+1]);
}
for(int i=1; i<=n-1; ++i){
// cout << "i: "<< i << " Ai:" << A[i] << " Bi:" << B[i]<<endl;
if(A[i] >= B[i+1]){
division[i] = 1;
k--;
break;
}
}
if(k==1){
cout << "NIE";
return 0;
}
cout << "TAK\n";
for(int i=1; i<=n; ++i){
if(division[i]){
cout << i << ' ';
}
}
}
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 5e5+5; const int INF = 1e9+7; ll tab[N],A[N],B[N]; bool division[N]; int main(){ ios_base::sync_with_stdio(0); ll n,k,mini=INF,maxi=-INF; cin >> n >> k; for(int i=1; i<=n; ++i){ cin >> tab[i]; maxi = max(maxi, tab[i]); mini = min(mini, tab[i]); } --k; if(k>=3){ int x=-1; for(int i=1; i<=n-1; ++i){ if(tab[i] >= tab[i+1]){ x = i; division[i] = 1; --k; if(k>0 && i!=1){ division[i-1] = 1; --k; } if(k>0 && i!=n-1){ division[i+1] = 1; --k; } break; } } if(x==-1){ cout << "NIE"; return 0; } cout << "TAK\n"; for(int i=1; i<=n&&k>0; ++i){ if(!division[i]){ division[i] = 1; --k; } } for(int i=1; i<=n; ++i) if(division[i]) cout << i << ' '; }else if(k==2){ // Szukamy ekstremalne elementy bool jestMinGdzies=0,jestMaxGdzies=0; for(int i=2; i<=n; ++i){ if(mini == tab[i]){ jestMinGdzies = 1; division[i] = 1; division[i-1] = 1; k-=2; break; } } if(k==2){ for(int i=2; i<=n-1; ++i){ if(maxi == tab[i]){ jestMaxGdzies = 1; division[i] = 1; division[i-1] = 1; k-=2; break; } } } if(!jestMinGdzies && !jestMaxGdzies){ cout << "NIE"; return 0; } cout << "TAK\n"; for(int i=1; i<=n; ++i){ if(division[i]) cout << i << ' '; } }else{ // k==1 A[0] = +INF; for(int i=1; i<=n; ++i){ A[i] = min(tab[i],A[i-1]); } B[n+1] = -INF; for(int i=n; i>=1; --i){ B[i] = max(tab[i],B[i+1]); } for(int i=1; i<=n-1; ++i){ // cout << "i: "<< i << " Ai:" << A[i] << " Bi:" << B[i]<<endl; if(A[i] >= B[i+1]){ division[i] = 1; k--; break; } } if(k==1){ cout << "NIE"; return 0; } cout << "TAK\n"; for(int i=1; i<=n; ++i){ if(division[i]){ cout << i << ' '; } } } return 0; } |
English