#include <limits.h>
#include <stdio.h>
struct int_pair {
int a;
int b;
};
struct int_pair find_max_index_(int *array, size_t length, size_t index, int max1, int max2, size_t idx1, size_t idx2) {
if ( index == length ) return (struct int_pair){ idx1, idx2 };
else if ( array[index] > max1 )
return find_max_index_(array, length, index + 1, array[index], max1, index, idx1);
else if ( array[index] > max2 )
return find_max_index_(array, length, index + 1, max1, array[index], idx1, index);
else return find_max_index_(array, length, index + 1, max1, max2, idx1, idx2);
}
struct int_pair find_max_index(int *array, size_t length) {
return find_max_index_(array, length, 0, INT_MIN, INT_MIN, -1, -1);
}
int main(void) {
int data[] = { 2, 0, 1, 5, 5, 21 };
struct int_pair result;
result = find_max_index(data, 6);
printf("%d %d\n", result.
a, result.
b); return 0;
}
I2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCnN0cnVjdCBpbnRfcGFpciB7CglpbnQgYTsKCWludCBiOwp9OwoKc3RydWN0IGludF9wYWlyIGZpbmRfbWF4X2luZGV4XyhpbnQgKmFycmF5LCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgaW5kZXgsIGludCBtYXgxLCBpbnQgbWF4Miwgc2l6ZV90IGlkeDEsIHNpemVfdCBpZHgyKSB7CglpZiAoIGluZGV4ID09IGxlbmd0aCApIHJldHVybiAoc3RydWN0IGludF9wYWlyKXsgaWR4MSwgaWR4MiB9OwoJZWxzZSBpZiAoIGFycmF5W2luZGV4XSA+IG1heDEgKQoJCXJldHVybiBmaW5kX21heF9pbmRleF8oYXJyYXksIGxlbmd0aCwgaW5kZXggKyAxLCBhcnJheVtpbmRleF0sIG1heDEsIGluZGV4LCBpZHgxKTsKCWVsc2UgaWYgKCBhcnJheVtpbmRleF0gPiBtYXgyICkKCQlyZXR1cm4gZmluZF9tYXhfaW5kZXhfKGFycmF5LCBsZW5ndGgsIGluZGV4ICsgMSwgbWF4MSwgYXJyYXlbaW5kZXhdLCBpZHgxLCBpbmRleCk7CgllbHNlIHJldHVybiBmaW5kX21heF9pbmRleF8oYXJyYXksIGxlbmd0aCwgaW5kZXggKyAxLCBtYXgxLCBtYXgyLCBpZHgxLCBpZHgyKTsKfQoKc3RydWN0IGludF9wYWlyIGZpbmRfbWF4X2luZGV4KGludCAqYXJyYXksIHNpemVfdCBsZW5ndGgpIHsKCXJldHVybiBmaW5kX21heF9pbmRleF8oYXJyYXksIGxlbmd0aCwgMCwgSU5UX01JTiwgSU5UX01JTiwgLTEsIC0xKTsKfQoKaW50IG1haW4odm9pZCkgewoJaW50IGRhdGFbXSA9IHsgMiwgMCwgMSwgNSwgNSwgMjEgfTsKCXN0cnVjdCBpbnRfcGFpciByZXN1bHQ7CglyZXN1bHQgPSBmaW5kX21heF9pbmRleChkYXRhLCA2KTsKCXByaW50ZigiJWQgJWRcbiIsIHJlc3VsdC5hLCByZXN1bHQuYik7CglyZXR1cm4gMDsKfQ==