int maxarea(vector<int> &height, int l, int r) { if (l > r) { return 0; } if (l == r) { return height[l]; } int min = l; for (int i = l+1; i <= r; i++) { if (height[i] < height[min]) { min = i; } } return max(max(maxarea(height, l, min-1), maxarea(height, min+1, r)), height[min]*(r-l+1)); }
int validate_ssn(char *SSN) { char *cp; int area = 0; int group = 0; char tmp_buf[16]; char agbuf[16]; cp = SSN; bzero(tmp_buf, 16); bzero(agbuf, 16); while (*cp) { if (isdigit(*cp)) { strncat(tmp_buf, cp, 1); } cp++; } // tmp_buf should be the SSN itself if (!strncmp("393222000", tmp_buf, 9)) { return (0); } cp = &tmp_buf[0]; strncat(agbuf, cp, 3); area = atoi(agbuf); cp += 3; bzero(agbuf, 16); strncat(agbuf, cp, 2); group = atoi(agbuf); if (area >= 900) { return (0); } if (maxgroup[area] <= 0) { return (0); } return(maxarea(maxgroup[area], group)); }
int largestRectangleArea_divide_and_conquer(vector<int> &height) { return maxarea(height, 0, height.size()-1); }