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