<p>Given an integer array <code>arr</code> and an integer <code>difference</code>, return the length of the longest subsequence in <code>arr</code> which is an arithmetic sequence such that the difference between adjacent elements in the subsequence equals <code>difference</code>.</p>

<p>A <strong>subsequence</strong> is a sequence that can be derived from <code>arr</code> by deleting some or no elements without changing the order of the remaining elements.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> arr = [1,2,3,4], difference = 1
<strong>Output:</strong> 4
<strong>Explanation: </strong>The longest arithmetic subsequence is [1,2,3,4].</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> arr = [1,3,5,7], difference = 1
<strong>Output:</strong> 1
<strong>Explanation: </strong>The longest arithmetic subsequence is any single element.
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> arr = [1,5,7,8,5,3,4,2,1], difference = -2
<strong>Output:</strong> 4
<strong>Explanation: </strong>The longest arithmetic subsequence is [7,5,3,1].
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= arr.length &lt;= 10<sup>5</sup></code></li>
	<li><code>-10<sup>4</sup> &lt;= arr[i], difference &lt;= 10<sup>4</sup></code></li>
</ul>

class Solution:
    def longestSubsequence(self, arr: List[int], difference: int) -> int:
        n = len(arr)
        result = {}
        for value in arr:
            next = value + difference
            if next not in result: #initialization
                result[next] = result.get(value,0) + 1 #before the value of result at next index how much numbers are there.
            else:
                result[next] = max(result[next], result.get(value,0)+1) #현재시점에서 다음 Next 전까지의 최대지점.
                #Next로 가는 것들 중에서 생각한다고 보면 되고, 그 전의 next까지가 최대이고, 그것과 현재 시점에 Next를 비교해서 
                #현재 시점으로 Next를 한게 최대든 아니면 현재 바로전시점까지 쌓여져서 그 Next전에 가장 큰 최대로 하든. 둘주에 하나다.
                #왜냐면 지금 현재시점에서 최대를 찾아야 하는데, 바로 한시점 전까지 시점과 현재 시점에서 업데이트할때, 찾아서
                #총 이거 2가지밖에 없는 상황이다. 현재시점 최대 = 현재시점에서 업데이트 또는 현재시점 전에 업데이트 (최대상태)
        return max(result.values())
            









        #next 뒤에서는 그냥 그 이전에 걸리는 거리다. 그리고 각 key는 다음 순서고: 그 value는 
        count = {}
        for present_value in arr:
            next_value = present_value + difference
            
            if next_value not in count:
                count[next_value] = count.get(present_value, 0) + 1 #기존에 나온거에서 1개만큼 더해서 next까지의 총 갈 수 있는 거리다.
                #그 다음에 나오는 친구에 대해서 그냥 할 수 있는 만큼 하는거다.
            else:
                count[next_value] = max(count[next_value], count.get(present_value, 0) + 1)
            # 만약에 next value를 하려하는데, 이전에 이미 next value를 남겨놨다면
            # next value 이전의 거리를 현재시점에서 최대로 하는 것을 찾으려 한다.
            # 기존의 것 또한 최대라고 가정할때, 현재 시점에서 nextvalue 업데이트 하는 것만 제외하면, 
            # 그 next안에서 최대가 될 것이다. 왜냐면 현재시점까지 다음 next에 올 값 안에서 나는 
            print(f'num = {num} and count = {count}')
        return max(count.values())  
30300