<think>
Okay, I need to implement the cross_up function. Let's see what the problem says. The function is supposed to count how many times a run of readings crosses a level going upward. A crossing is when a reading reaches the level and the previous reading was below it.

So, the input is a list of readings and a level. The output is the count of such crossings. Let me think about how to approach this.

First, I need to iterate through the readings, comparing each reading to the level and the previous one. For each pair of consecutive readings, I need to check if the current one is equal to or above the level, and the previous one was below the level. If that's the case, then it's a crossing.

Wait, but the problem says "a crossing being a reading that reaches the level when the reading immediately before it stood below." So, the current reading must reach the level (so it's >= level?), and the previous one was below (so < level). So, for each i from 1 to len(readings)-1, check if readings[i] >= level and readings[i-1] < level. If that's true, then increment the count.

But wait, what about the first reading? The problem says that the first reading should count as a crossing if it already reaches the level? The problem says that the first reading should count as a crossing when it already reaches the level. Wait, the problem says that the first reading should count as a crossing when it already reaches the level. Wait, the original problem says: "Whether the first reading should count as a crossing when it already reaches the level is not stated." So, the user hasn't specified that. So, maybe the first reading is not considered. Because the problem says that the crossing is when the current reading reaches the level and the previous was below. So, for the first reading, there's no previous, so it can't be a crossing. So, the function should start checking from the second element.

So, the steps are:

Initialize a count to 0.

Loop from i=1 to len(readings)-1:

Check if readings[i] >= level and readings[i-1] < level. If yes, increment count.

So, the function would look like this.

But wait, what if the readings list is empty? Then return 0. Also, if there's only one reading, then no crossings possible, so return 0.

So, the code would be:

def cross_up(readings: list, level: int) -> int:
    count = 0
    for i in range(1, len(readings)):
        if readings[i] >= level and readings[i-1] < level:
            count += 1
    return count

Wait, but what if the readings list is empty? The code would handle that because len(readings) is 0, so the loop doesn't run, and returns 0. That's correct.

Testing some examples:

Example 1: readings = [1, 2, 3], level = 2. The first reading is 1 (below), second is 2 (equal). The previous was 1 < 2. So that's a crossing. Then third is 3, previous is 2 (which is >= level). So no. So total 1.

Another example: readings = [1, 3, 2, 3], level = 3. The first element is 1 < 3. Second is 3 >= 3. Previous is 1 < 3. So count +=1. Third is 2 < 3. Previous is 3 >= 3. So no. Fourth is 3 >=3