Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- unsigned long int *createArray(int);
- void histogra();
- int main()
- {
- histogra();
- return 0;
- }
- unsigned long int * createArray(int n)
- {
- return (unsigned long int *)malloc(n*sizeof(unsigned long int));
- }
- void histogra()
- {
- int tos = -1, top, n = 0, i;
- unsigned long long int maxArea = -1, area = 0;
- while (1)
- {
- scanf("%d", &n);
- if (n < 1)
- return;
- maxArea = 0;
- area = 0;
- tos = -1;
- unsigned long int *arr = createArray(n);
- unsigned long int *stack = createArray(n);
- for (i = 0; i < n; i++)
- {
- scanf("%ld", &arr[i]);
- if (tos == -1)
- {
- stack[++tos] = i;
- continue;
- }
- if (arr[i] >= arr[stack[tos]])
- {
- stack[++tos] = i;
- continue;
- }
- while (tos != -1){
- if (arr[i] < arr[stack[tos]])
- {
- top = stack[tos--];
- if (tos == -1)
- area = arr[top] * i;
- else
- area = arr[top] * (i - stack[tos] - 1);
- if (area > maxArea)
- maxArea = area;
- }
- else
- break;
- }
- stack[++tos] = i;
- }
- while (tos != -1)
- {
- top = stack[tos--];
- if (tos == -1)
- area = arr[top] * i;
- else
- area = arr[top] * (i - stack[tos] - 1);
- if (area > maxArea)
- maxArea = area;
- }
- free(arr);
- free(stack);
- printf("%lld\n", maxArea);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement