Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import std.container;
- import std.conv;
- import std.stdio;
- import std.string;
- void main()
- {
- readln;
- auto input = readln.split.to!(int[]);
- auto stack = DList!int();
- auto area = 0;
- auto areaMax = 0;
- auto i = 0;
- while (i < input.length)
- {
- if (stack.empty || input[stack.back] <= input[i])
- {
- stack.insertBack(i);
- ++i;
- }
- else
- {
- auto top = stack.back();
- stack.removeBack();
- if (stack.empty)
- {
- area = input[top] * i;
- }
- else
- {
- area = input[top] * (i - stack.back - 1);
- }
- if (area > areaMax)
- {
- areaMax = area;
- }
- }
- }
- while (!stack.empty)
- {
- auto top = stack.back();
- stack.removeBack();
- if (stack.empty)
- {
- area = input[top] * i;
- }
- else
- {
- area = input[top] * (i - stack.back - 1);
- }
- if (area > areaMax)
- {
- areaMax = area;
- }
- }
- writeln(areaMax);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement