/* Jan Zakrzewski
Potyczki Algorytmiczne 2022
Zadanie Podwyżki */
#include <bits/stdc++.h>
using namespace std;
constexpr int N = 500'020;
int n, k;
int a[N];
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> k;
for(int i = 1; i <= n; ++i) cin >> a[i];
if(k == 2 || k == 3) {
int small[N], big[N];
small[1] = a[1], big[n] = a[n];
for(int i = 2; i <= n; ++i) small[i] = min(small[i-1], a[i]);
for(int i = n-1; i >= 1; --i) big[i] = max(big[i+1], a[i]);
if(k == 2) {
bool ok = false;
int v;
for(int i = 1; i <= n-1; ++i)
if(small[i] >= big[i+1]) {
ok = true;
v = i;
break;
}
if(ok) {
cout << "TAK\n";
cout << v << "\n";
} else cout << "NIE\n";
} else {
bool ok = false;
int v, w;
for(int i = 2; i <= n-1; ++i)
if(small[i-1] >= a[i]) {
ok = true;
v = i-1, w = i;
break;
} else if(a[i] >= big[i+1]) {
ok = true;
v = i, w = i+1;
break;
}
if(ok) {
cout << "TAK\n";
cout << v << " " << w << "\n";
} else cout << "NIE\n";
}
} else {
bool ok = false;
int v, w;
for(int i = 1; i <= n-1; ++i)
if(a[i] >= a[i+1]) {
ok = true;
v = i, w = i+1;
break;
}
if(!ok) cout << "NIE\n";
else {
cout << "TAK\n";
int u;
if(v == 1) {
u = v;
v = w;
w = w+1;
} else u = v-1;
int c = n-4;
for(int i = 1; i <= u-1; ++i)
if(c > 0) {
cout << i << " ";
c--;
}
for(int i = w+1; i <= n; ++i)
if(c > 0) {
cout << i << " ";
c--;
}
cout << "\n";
}
}
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 | /* Jan Zakrzewski Potyczki Algorytmiczne 2022 Zadanie Podwyżki */ #include <bits/stdc++.h> using namespace std; constexpr int N = 500'020; int n, k; int a[N]; int main() { ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> n >> k; for(int i = 1; i <= n; ++i) cin >> a[i]; if(k == 2 || k == 3) { int small[N], big[N]; small[1] = a[1], big[n] = a[n]; for(int i = 2; i <= n; ++i) small[i] = min(small[i-1], a[i]); for(int i = n-1; i >= 1; --i) big[i] = max(big[i+1], a[i]); if(k == 2) { bool ok = false; int v; for(int i = 1; i <= n-1; ++i) if(small[i] >= big[i+1]) { ok = true; v = i; break; } if(ok) { cout << "TAK\n"; cout << v << "\n"; } else cout << "NIE\n"; } else { bool ok = false; int v, w; for(int i = 2; i <= n-1; ++i) if(small[i-1] >= a[i]) { ok = true; v = i-1, w = i; break; } else if(a[i] >= big[i+1]) { ok = true; v = i, w = i+1; break; } if(ok) { cout << "TAK\n"; cout << v << " " << w << "\n"; } else cout << "NIE\n"; } } else { bool ok = false; int v, w; for(int i = 1; i <= n-1; ++i) if(a[i] >= a[i+1]) { ok = true; v = i, w = i+1; break; } if(!ok) cout << "NIE\n"; else { cout << "TAK\n"; int u; if(v == 1) { u = v; v = w; w = w+1; } else u = v-1; int c = n-4; for(int i = 1; i <= u-1; ++i) if(c > 0) { cout << i << " "; c--; } for(int i = w+1; i <= n; ++i) if(c > 0) { cout << i << " "; c--; } cout << "\n"; } } return 0; } |
English