#include<bits/stdc++.h>
using namespace std;
int tab[500001], l[500001], p[500001];
int main()
{
ios_base::sync_with_stdio(0);
int n, i, k, maks = 0, min = 1, i1 = 0;
cin >> n >> k;
for (i = 1; i <= n; i++){
cin >> tab[i];
}
if (k == 2) { // min po lewej ma być wieksze badz rowne maks z prawej
l[1] = tab[1];
for (i = 2; i <= n; i++){
if (tab[i] < l[i-1]) l[i] = tab[i];
else l[i] = l[i-1];
}
p[n] = tab[n];
for (i = n - 1; i >= 1; i--){
if (tab[i] > p[i+1]) p[i] = tab[i];
else p[i] = p[i+1];
}
for (i = 1; i < n; i++){
if (l[i] >= p[i+1]) {
i1 = i;
break;
}
}
if (i1 == 0) cout <<"NIE" << endl;
else {
cout << "TAK" << endl;
cout << i1;
}
return 0;
}
if ( k == 3){//musi istniec liczba mniejsza lub rowna od poczatkowych
i1 = 0;
min = 1;
for (i = 2; i <= n; i++){
if (tab[i] <= tab[min]) {
i1 = i;
break;
}
}
maks = n;
for (i = n - 1; i >= 1; i--){
if (tab[i] >= tab[maks]) {
i1 = i;
break;
}
}
if (i1 == 0) cout <<"NIE" << endl;
else {
cout << "TAK" << endl;
cout << i - 1 <<" "<< i << endl;
}
return 0;
}
// k > 3 musi istniec jakakolwiek mniejsza od poprzedniej
i1 = 0;
for (i = 2; i <= n; i++){
if(tab[i] <= tab[i-1]) {
if (i - 2 == 0) i1 = i - 1;
else i1 = i - 2;
break;
}
}
if (i1 == 0) cout <<"NIE" << endl;
else {
cout << "TAK" << endl;
k -= 4; i = 1;
while (k > 0 && i < i1){
cout << i <<" ";
k--;
i++;
}
cout << i1 << " " << i1 + 1 <<" "<<i1 + 2 <<" ";
i = i1 + 3;
while (k > 0){
cout << i <<" ";
k--;
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 | #include<bits/stdc++.h> using namespace std; int tab[500001], l[500001], p[500001]; int main() { ios_base::sync_with_stdio(0); int n, i, k, maks = 0, min = 1, i1 = 0; cin >> n >> k; for (i = 1; i <= n; i++){ cin >> tab[i]; } if (k == 2) { // min po lewej ma być wieksze badz rowne maks z prawej l[1] = tab[1]; for (i = 2; i <= n; i++){ if (tab[i] < l[i-1]) l[i] = tab[i]; else l[i] = l[i-1]; } p[n] = tab[n]; for (i = n - 1; i >= 1; i--){ if (tab[i] > p[i+1]) p[i] = tab[i]; else p[i] = p[i+1]; } for (i = 1; i < n; i++){ if (l[i] >= p[i+1]) { i1 = i; break; } } if (i1 == 0) cout <<"NIE" << endl; else { cout << "TAK" << endl; cout << i1; } return 0; } if ( k == 3){//musi istniec liczba mniejsza lub rowna od poczatkowych i1 = 0; min = 1; for (i = 2; i <= n; i++){ if (tab[i] <= tab[min]) { i1 = i; break; } } maks = n; for (i = n - 1; i >= 1; i--){ if (tab[i] >= tab[maks]) { i1 = i; break; } } if (i1 == 0) cout <<"NIE" << endl; else { cout << "TAK" << endl; cout << i - 1 <<" "<< i << endl; } return 0; } // k > 3 musi istniec jakakolwiek mniejsza od poprzedniej i1 = 0; for (i = 2; i <= n; i++){ if(tab[i] <= tab[i-1]) { if (i - 2 == 0) i1 = i - 1; else i1 = i - 2; break; } } if (i1 == 0) cout <<"NIE" << endl; else { cout << "TAK" << endl; k -= 4; i = 1; while (k > 0 && i < i1){ cout << i <<" "; k--; i++; } cout << i1 << " " << i1 + 1 <<" "<<i1 + 2 <<" "; i = i1 + 3; while (k > 0){ cout << i <<" "; k--; i++; } } return 0; } |
English