#include <iostream> #include <vector> #include <algorithm> using namespace std; int n = 0, k = 0, wczytana_liczba = 0; bool czy_mamy_dwa_obok_siebie = false; vector<int> liczby; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; for (int i = 0; i < n; ++i) { cin >> wczytana_liczba; liczby.push_back(wczytana_liczba); } for (int i = 0; i < n-1; ++i) { if (liczby[i] >= liczby[i+1]) czy_mamy_dwa_obok_siebie = true; } if (czy_mamy_dwa_obok_siebie == true) { vector<int> miny_lewo; vector<int> maxy_prawo; maxy_prawo.assign(n,-1); int min_lew = 1e9+5; int max_praw = -10; for (int i = 0; i < n; ++i) { min_lew = min(min_lew,liczby[i]); miny_lewo.push_back(min_lew); } for (int i = n-1; i >= 0; --i) { max_praw = max(max_praw,liczby[i]); maxy_prawo[i] = max_praw; } if (k == 2) { for (int i = 0; i < n-1; ++i) { if (liczby[i] >= liczby[i+1] && miny_lewo[i] >= maxy_prawo[i+1]) { printf("TAK \n"); printf("%d",i+1); return 0; } } printf("NIE"); } else if (k == 3) { if (liczby[0] >= liczby[1]) { printf("TAK \n"); printf("1 2"); return 0; } else if (liczby[n-2] >= liczby[n-1]) { printf("TAK \n"); printf("%d %d",n-2,n-1); return 0; } for (int i = 0; i < n-1; ++i) { if (liczby[i] >= liczby[i+1]) { if (miny_lewo[i] >= liczby[i+1]) { printf("TAK \n"); printf("%d %d",i+1,i+2); return 0; } if (maxy_prawo[i+1] <= liczby[i]) { printf("TAK \n"); printf("%d %d",i,i+1); return 0; } } } printf("NIE"); } else { int ile_uzupelnic = k - 3, idx_pas1 = -1, idx_pas2 = -1; for (int i = 0; i < n-1; ++i) { if (liczby[i] >= liczby[i+1]) { idx_pas1 = i; idx_pas2 = i+1; break; } } vector<int> wyniki = {idx_pas1+1,idx_pas2+1}; for (int i = idx_pas1-1; i >= 0; --i) { wyniki.push_back(i+1); ile_uzupelnic--; if (ile_uzupelnic == 0) break; } if (ile_uzupelnic != 0) { for (int i = idx_pas2+1; i < n; ++i) { wyniki.push_back(i+1); ile_uzupelnic--; if (ile_uzupelnic == 0) break; } } sort(wyniki.begin(),wyniki.end()); printf("TAK \n"); for (auto g : wyniki) printf("%d ",g); } } else { printf("NIE"); } 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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int n = 0, k = 0, wczytana_liczba = 0; bool czy_mamy_dwa_obok_siebie = false; vector<int> liczby; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; for (int i = 0; i < n; ++i) { cin >> wczytana_liczba; liczby.push_back(wczytana_liczba); } for (int i = 0; i < n-1; ++i) { if (liczby[i] >= liczby[i+1]) czy_mamy_dwa_obok_siebie = true; } if (czy_mamy_dwa_obok_siebie == true) { vector<int> miny_lewo; vector<int> maxy_prawo; maxy_prawo.assign(n,-1); int min_lew = 1e9+5; int max_praw = -10; for (int i = 0; i < n; ++i) { min_lew = min(min_lew,liczby[i]); miny_lewo.push_back(min_lew); } for (int i = n-1; i >= 0; --i) { max_praw = max(max_praw,liczby[i]); maxy_prawo[i] = max_praw; } if (k == 2) { for (int i = 0; i < n-1; ++i) { if (liczby[i] >= liczby[i+1] && miny_lewo[i] >= maxy_prawo[i+1]) { printf("TAK \n"); printf("%d",i+1); return 0; } } printf("NIE"); } else if (k == 3) { if (liczby[0] >= liczby[1]) { printf("TAK \n"); printf("1 2"); return 0; } else if (liczby[n-2] >= liczby[n-1]) { printf("TAK \n"); printf("%d %d",n-2,n-1); return 0; } for (int i = 0; i < n-1; ++i) { if (liczby[i] >= liczby[i+1]) { if (miny_lewo[i] >= liczby[i+1]) { printf("TAK \n"); printf("%d %d",i+1,i+2); return 0; } if (maxy_prawo[i+1] <= liczby[i]) { printf("TAK \n"); printf("%d %d",i,i+1); return 0; } } } printf("NIE"); } else { int ile_uzupelnic = k - 3, idx_pas1 = -1, idx_pas2 = -1; for (int i = 0; i < n-1; ++i) { if (liczby[i] >= liczby[i+1]) { idx_pas1 = i; idx_pas2 = i+1; break; } } vector<int> wyniki = {idx_pas1+1,idx_pas2+1}; for (int i = idx_pas1-1; i >= 0; --i) { wyniki.push_back(i+1); ile_uzupelnic--; if (ile_uzupelnic == 0) break; } if (ile_uzupelnic != 0) { for (int i = idx_pas2+1; i < n; ++i) { wyniki.push_back(i+1); ile_uzupelnic--; if (ile_uzupelnic == 0) break; } } sort(wyniki.begin(),wyniki.end()); printf("TAK \n"); for (auto g : wyniki) printf("%d ",g); } } else { printf("NIE"); } return 0; } |