#include <stdio.h>
int max2(int a, int b) {
if(a > b) return a;
else
return b;
}
// 0 9
int divide_et_impera(int arr[], int lo, int hi, int *max) {
if( lo == hi ) {
return arr[ lo ];
} else {
// 0 4 max
int a = divide_et_impera(arr, lo, (lo+hi)/2, max);
// 5 9
int b = divide_et_impera(arr, (lo+hi)/2+1, hi, max);
*max = max2(a,b);
return *max;
}
}
int main(int argc, char const *argv[]) {
int max;
int arr[10] = {0,1,222,3,4,115,6,7,8,19};
// 0 1 2 3 4 5 6 7 8 9
//(0+9)/2
//max(0,1) = 1
//max(222,3) = 222
//max(1,222) = 222
divide_et_impera(arr, 0, 9, &max);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWF4MihpbnQgYSwgaW50IGIpIHsKCiAgICBpZihhID4gYikgcmV0dXJuIGE7CgogICAgZWxzZQogICAgICAgICAgICAgIHJldHVybiBiOwp9Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgOQppbnQgZGl2aWRlX2V0X2ltcGVyYShpbnQgYXJyW10sIGludCBsbywgaW50IGhpLCBpbnQgKm1heCkgewoKICAgICBpZiggbG8gPT0gaGkgKSB7CgogICAgICAgIHJldHVybiBhcnJbIGxvIF07CgogICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAwICAgIDQgICAgICAgICBtYXgKICAgICAgICAgaW50IGEgPSBkaXZpZGVfZXRfaW1wZXJhKGFyciwgbG8sIChsbytoaSkvMiwgbWF4KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA1IDkKICAgICAgICAgaW50IGIgPSBkaXZpZGVfZXRfaW1wZXJhKGFyciwgKGxvK2hpKS8yKzEsIGhpLCBtYXgpOwoKICAgICAgICAgKm1heCA9IG1heDIoYSxiKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiAqbWF4OwogICAgIH0KfQoKCmludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICphcmd2W10pIHsKCiAgaW50IG1heDsKCiAgaW50IGFyclsxMF0gPSB7MCwxLDIyMiwzLDQsMTE1LDYsNyw4LDE5fTsKICAvLyAgICAgICAgICAgICAwIDEgICAyIDMgNCAgIDUgNiA3IDggIDkKICAvLygwKzkpLzIKICAgICAgICAgICAgICAgICAvL21heCgwLDEpID0gMQogICAgICAgICAgICAgICAgIC8vbWF4KDIyMiwzKSA9IDIyMgogICAgICAgICAgICAgICAgIC8vbWF4KDEsMjIyKSA9IDIyMgoKCiAgZGl2aWRlX2V0X2ltcGVyYShhcnIsIDAsIDksICZtYXgpOwoKICBwcmludGYoIm1heCA9ICVkXG4iLG1heCk7CgogIHJldHVybiAwOwp9