#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; } |
English