#ifdef _MSC_VER #ifndef __GNUC__ #pragma warning(disable: 4996) #endif #define main main0 #endif #include <iostream> #include <vector> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef unsigned int uint; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int n, k; vector<int> przychody, minOdPoczatku, maxOdKonca; cin >> n >> k; przychody.clear(); minOdPoczatku.clear(); maxOdKonca.clear(); przychody.resize(n); minOdPoczatku.resize(n); maxOdKonca.resize(n); for(int i = 0; i < n; ++i) cin >> przychody[i]; if(k == 2) { int pozycja = 0; minOdPoczatku[0] = przychody[0]; maxOdKonca[n-1] = przychody[n-1]; for(int i = 1, j = n - 2; i < n; ++i, --j) { minOdPoczatku[i] = min(minOdPoczatku[i-1], przychody[i]); maxOdKonca[j] = max(maxOdKonca[j+1], przychody[j]); } for(int i = 1; pozycja == 0 && i < n; ++i) if(minOdPoczatku[i-1] >= maxOdKonca[i]) pozycja = i; if(pozycja > 0) cout << "TAK\n" << pozycja << endl; else cout << "NIE" << endl; } if(k == 3) { int pozycja = 0; minOdPoczatku[0] = przychody[0]; maxOdKonca[n-1] = przychody[n-1]; for(int i = 1, j = n - 2; i < n; ++i, --j) { minOdPoczatku[i] = min(minOdPoczatku[i-1], przychody[i]); maxOdKonca[j] = max(maxOdKonca[j+1], przychody[j]); } for(int i = 1, n1 = n - 1; pozycja == 0 && i < n1; ++i) if(minOdPoczatku[i] >= przychody[i] || przychody[i] >= maxOdKonca[i+1]) pozycja = i; if(pozycja > 0) cout << "TAK\n" << pozycja << ' ' << pozycja+1 << endl; else cout << "NIE" << endl; } if(k > 3) { int pozycja = 0, poprzedni = przychody[0]; for(int i = 1; pozycja == 0 && i < n; ++i) if(poprzedni < przychody[i]) poprzedni = przychody[i]; else pozycja = i; if(pozycja > 0) { int koniec = min(k - 1 + pozycja, n); int i = koniec - k + 1; cout << "TAK\n" << i; for(++i; i < koniec; ++i) cout << ' ' << i; cout << endl; } else cout << "NIE" << endl; } 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 | #ifdef _MSC_VER #ifndef __GNUC__ #pragma warning(disable: 4996) #endif #define main main0 #endif #include <iostream> #include <vector> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef unsigned int uint; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int n, k; vector<int> przychody, minOdPoczatku, maxOdKonca; cin >> n >> k; przychody.clear(); minOdPoczatku.clear(); maxOdKonca.clear(); przychody.resize(n); minOdPoczatku.resize(n); maxOdKonca.resize(n); for(int i = 0; i < n; ++i) cin >> przychody[i]; if(k == 2) { int pozycja = 0; minOdPoczatku[0] = przychody[0]; maxOdKonca[n-1] = przychody[n-1]; for(int i = 1, j = n - 2; i < n; ++i, --j) { minOdPoczatku[i] = min(minOdPoczatku[i-1], przychody[i]); maxOdKonca[j] = max(maxOdKonca[j+1], przychody[j]); } for(int i = 1; pozycja == 0 && i < n; ++i) if(minOdPoczatku[i-1] >= maxOdKonca[i]) pozycja = i; if(pozycja > 0) cout << "TAK\n" << pozycja << endl; else cout << "NIE" << endl; } if(k == 3) { int pozycja = 0; minOdPoczatku[0] = przychody[0]; maxOdKonca[n-1] = przychody[n-1]; for(int i = 1, j = n - 2; i < n; ++i, --j) { minOdPoczatku[i] = min(minOdPoczatku[i-1], przychody[i]); maxOdKonca[j] = max(maxOdKonca[j+1], przychody[j]); } for(int i = 1, n1 = n - 1; pozycja == 0 && i < n1; ++i) if(minOdPoczatku[i] >= przychody[i] || przychody[i] >= maxOdKonca[i+1]) pozycja = i; if(pozycja > 0) cout << "TAK\n" << pozycja << ' ' << pozycja+1 << endl; else cout << "NIE" << endl; } if(k > 3) { int pozycja = 0, poprzedni = przychody[0]; for(int i = 1; pozycja == 0 && i < n; ++i) if(poprzedni < przychody[i]) poprzedni = przychody[i]; else pozycja = i; if(pozycja > 0) { int koniec = min(k - 1 + pozycja, n); int i = koniec - k + 1; cout << "TAK\n" << i; for(++i; i < koniec; ++i) cout << ' ' << i; cout << endl; } else cout << "NIE" << endl; } return 0; } |