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