using System;
using System.Collections.Generic;
class WarmerDays
{
static void PrintList(List<int> values) {
foreach (var n in values) {
Console.Write(n + " ");
}
Console.WriteLine();
}
static List<int> NumberOfDaysToWait(List<int> temperatures) {
int size = temperatures.Count;
var result = new List<int>(new int[size]);
var stack = new Stack<int>();
for (int i = 0; i < size; i++) {
while (stack.Count > 0 && temperatures[i] > temperatures[stack.Peek()]) {
int idx = stack.Pop();
result[idx] = i - idx;
}
stack.Push(i);
}
while (stack.Count > 0) {
result[stack.Pop()] = 0;
}
return result;
}
static void Main()
{
var temperatures = new List<int> { 82, 84, 81, 58, 85, 89, 75, 71 };
// 82 -> 84 = 1
// 84 -> 81 -> 58 -> 85 = 3
// 81 -> 58 -> 85 = 2
// 58 -> 85 = 1
// 85 -> 89 = 1
// 89 -> 75 -> 71 = 0
// 75 -> 71 = 0
var result = NumberOfDaysToWait(temperatures);
PrintList(result);
}
}
/*
run:
1 3 2 1 1 0 0 0
*/