C# program which measures the distance between the average and maximum/minimum temperature
If you want to see how performance is you need to get the user input out of the loop.  I'm assuming you don't want to measure the time it takes someone to type in or paste in the data elements.  

You don't need the variable how_many as it will always be the same as the Count of which, which by the way isn't a good name for a variable even something like results would be better name.

You also don't need the context array variable. Just need to store the current value not save each element as it loops through. 

The variables i, y, max, average, min can all be declared in the loop scope and not need to be reset.

Calling Count() on  which.Count() is the Linq Count method, should just call the list Count property 

I'm also assuming this is a beginner question and won't get into Console as input and validating the data coming from it is valid.  

I personally didn't want to type in all the data so I made the computer generate random data, if in debug mode

    static void Main(string[] args)
    {
#if DEBUG
        var random = new Random();
        var inputs = "1000 1000".Split();
#else
        var inputs = Console.ReadLine().Split();
#endif
        var cities = Convert.ToInt32(inputs[0]);
        var days = Convert.ToInt32(inputs[1]);

        var data = new List&lt;int[]&gt;(cities);
        for (var i = 0; i &lt; cities; i++)
        {
#if DEBUG
            var cityData = Enumerable.Range(0, days)
                .Select(_ =&gt; random.Next(100))
                .ToArray();
#else
            var cityData = Console.ReadLine()
                .Split()
                .Select(x =&gt; Convert.ToInt32(x))
                .ToArray();
#endif
            if (cityData.Length != days)
            {
                Array.Resize(ref cityData, days);
            }
            data.Add(cityData);
        }

        var timer = new Stopwatch();
        timer.Start();
        var results = new List&lt;int&gt;();
        for (var i = 0; i &lt; cities; i++)
        {
            float max = float.MinValue;
            float average = 0;
            float min = float.MaxValue;
            for (var y = 0; y &lt; days; y++)
            {
                var content = data[i][y];
                average += content;
                if (content &gt; max)
                {
                    max = content;
                }
                if (content &lt; min)
                {
                    min = content;
                }
            }
            average = average / days;

            if (max - average &gt; average - min)
            {
                int position = i + 1;
                results.Add(position);
            }
        }

        Console.Write(results.Count + " ");
        Console.WriteLine(string.Join(" ", results));
        timer.Stop();
        Console.WriteLine();
        Console.WriteLine($"Total Processing Time: {timer.Elapsed}");
        Console.ReadKey();
    }


This code runs in less than a second on my machine.  I assume waiting for user input was what was taking the longest time in pervious one and not actually the processing of the data.