#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <stack>
#include <cmath>
using namespace std;
const int m = 500000;
struct days {
int pref;
int suff;
};
int n_day, n_range, day[m];
days min_max[m];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n_day >> n_range;
for (int i = 0; i < n_day; i++)
cin >> day[i];
if (n_range > 3) {
int division = -1;
for (int i = 0; i < n_day - 1; i++) {
if (day[i] >= day[i + 1]) {
division = i;
break;
}
}
if (division < 0) {
cout << "NIE";
return 0;
}
cout << "TAK\n";
if (division == n_day - 1) {
for (int i = 1; i < n_range - 2; i++)
cout << i << ' ';
cout << division << ' ' << division + 1;
}
if (division < n_range - 2)
for (int i = 1; i < n_range; i++)
cout << i << ' ';
else {
for (int i = 1; i < n_range - 3; i++)
cout << i << ' ';
cout << division << ' ' << division + 1 << ' ' << division + 2;
}
return 0;
}
min_max[0].pref = day[0];
for (int i = 1; i < n_day; i++)
min_max[i].pref = min(min_max[i - 1].pref, day[i]);
min_max[n_day - 1].suff = day[n_day - 1];
for (int i = n_day-2; i >=0; i--)
min_max[i].suff = max(min_max[i + 1].suff, day[i]);
if (n_range == 2) {
for (int i = 0; i < n_day - 1; i++)
if (min_max[i].pref >= min_max[i + 1].suff) {
cout << "TAK\n" << i + 1;
return 0;
}
}
else {
for (int i=1;i<n_day-1;i++)
if (min_max[i - 1].pref >= day[i] || day[i] >= min_max[i + 1].suff) {
cout << "TAK\n" << i << ' ' << i + 1;
return 0;
}
}
cout << "NIE";
}
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 | #include <iostream> #include <algorithm> #include <string> #include <vector> #include <queue> #include <map> #include <set> #include <stack> #include <cmath> using namespace std; const int m = 500000; struct days { int pref; int suff; }; int n_day, n_range, day[m]; days min_max[m]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n_day >> n_range; for (int i = 0; i < n_day; i++) cin >> day[i]; if (n_range > 3) { int division = -1; for (int i = 0; i < n_day - 1; i++) { if (day[i] >= day[i + 1]) { division = i; break; } } if (division < 0) { cout << "NIE"; return 0; } cout << "TAK\n"; if (division == n_day - 1) { for (int i = 1; i < n_range - 2; i++) cout << i << ' '; cout << division << ' ' << division + 1; } if (division < n_range - 2) for (int i = 1; i < n_range; i++) cout << i << ' '; else { for (int i = 1; i < n_range - 3; i++) cout << i << ' '; cout << division << ' ' << division + 1 << ' ' << division + 2; } return 0; } min_max[0].pref = day[0]; for (int i = 1; i < n_day; i++) min_max[i].pref = min(min_max[i - 1].pref, day[i]); min_max[n_day - 1].suff = day[n_day - 1]; for (int i = n_day-2; i >=0; i--) min_max[i].suff = max(min_max[i + 1].suff, day[i]); if (n_range == 2) { for (int i = 0; i < n_day - 1; i++) if (min_max[i].pref >= min_max[i + 1].suff) { cout << "TAK\n" << i + 1; return 0; } } else { for (int i=1;i<n_day-1;i++) if (min_max[i - 1].pref >= day[i] || day[i] >= min_max[i + 1].suff) { cout << "TAK\n" << i << ' ' << i + 1; return 0; } } cout << "NIE"; } |
English