#include <iostream>
using namespace std;
template <typename T>
bool mniejsze (T pierwszy , T drugi){
if( pierwszy < drugi)
return true;
return false;
}
template <typename T>
bool wieksze (T pierwszy, T drugi){
if( pierwszy > drugi )
return true;
return false;
}
template<typename T>
struct f {
typedef bool( *type)( T, T );
};
template<typename T>
T minmax(T a[], int n, bool b, typename f<T>::type fp ){
if ( fp( a[0], a[1])) return 1;
return -1;
}
int main() {
// your code goes here
f<int>::type f1 = mniejsze<int>;
bool b = f1( 3, 4);
int a[] = { 3, 4};
std::cout << minmax<int>( a, 0, 0, f1);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmJvb2wgbW5pZWpzemUgKFQgcGllcndzenkgLCBUIGRydWdpKXsKICAgIGlmKCBwaWVyd3N6eSA8IGRydWdpKQogICAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KYm9vbCB3aWVrc3plIChUIHBpZXJ3c3p5LCBUIGRydWdpKXsKICAgIGlmKCBwaWVyd3N6eSA+IGRydWdpICkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IGYgewogICAgdHlwZWRlZiBib29sKCAqdHlwZSkoIFQsIFQgKTsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+ClQgbWlubWF4KFQgYVtdLCBpbnQgbiwgYm9vbCBiLCB0eXBlbmFtZSBmPFQ+Ojp0eXBlIGZwICl7IAoJaWYgKCBmcCggYVswXSwgYVsxXSkpIHJldHVybiAxOwoJcmV0dXJuIC0xOwp9CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCWY8aW50Pjo6dHlwZSAgZjEgPSBtbmllanN6ZTxpbnQ+OwogICAgYm9vbCBiID0gZjEoIDMsIDQpOwogICAgaW50IGFbXSA9IHsgMywgNH07CiAgICBzdGQ6OmNvdXQgPDwgbWlubWF4PGludD4oIGEsIDAsIDAsIGYxKTsKCXJldHVybiAwOwp9