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));
 }
Example #2
0
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);
 }