<p>You are given an integer <code>n</code> denoting the total number of servers and a <strong>2D</strong> <strong>0-indexed </strong>integer array <code>logs</code>, where <code>logs[i] = [server_id, time]</code> denotes that the server with id <code>server_id</code> received a request at time <code>time</code>.</p>

<p>You are also given an integer <code>x</code> and a <strong>0-indexed</strong> integer array <code>queries</code>.</p>

<p>Return <em>a <strong>0-indexed</strong> integer array</em> <code>arr</code> <em>of length</em> <code>queries.length</code> <em>where</em> <code>arr[i]</code> <em>represents the number of servers that <strong>did not receive</strong> any requests during the time interval</em> <code>[queries[i] - x, queries[i]]</code>.</p>

<p>Note that the time intervals are inclusive.</p>

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

<pre>
<strong>Input:</strong> n = 3, logs = [[1,3],[2,6],[1,5]], x = 5, queries = [10,11]
<strong>Output:</strong> [1,2]
<strong>Explanation:</strong> 
For queries[0]: The servers with ids 1 and 2 get requests in the duration of [5, 10]. Hence, only server 3 gets zero requests.
For queries[1]: Only the server with id 2 gets a request in duration of [6,11]. Hence, the servers with ids 1 and 3 are the only servers that do not receive any requests during that time period.

</pre>

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

<pre>
<strong>Input:</strong> n = 3, logs = [[2,4],[2,1],[1,2],[3,1]], x = 2, queries = [3,4]
<strong>Output:</strong> [0,1]
<strong>Explanation:</strong> 
For queries[0]: All servers get at least one request in the duration of [1, 3].
For queries[1]: Only server with id 3 gets no request in the duration [2,4].

</pre>

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

<ul>
	<li><code>1 &lt;= n &lt;= 10<sup>5</sup></code></li>
	<li><code>1 &lt;= logs.length &lt;= 10<sup>5</sup></code></li>
	<li><code>1 &lt;= queries.length &lt;= 10<sup>5</sup></code></li>
	<li><code><font face="monospace">logs[i].length == 2</font></code></li>
	<li><code>1 &lt;= logs[i][0] &lt;= n</code></li>
	<li><code>1 &lt;= logs[i][1] &lt;= 10<sup>6</sup></code></li>
	<li><code>1 &lt;= x &lt;= 10<sup>5</sup></code></li>
	<li><code>x &lt;&nbsp;queries[i]&nbsp;&lt;= 10<sup>6</sup></code></li>
</ul>

from collections import Counter

class Solution:
    def countServers(self, n: int, logs: List[List[int]], x: int, queries: List[int]) -> List[int]:
        # Sort logs by time
        logs.sort(key=lambda x: x[1])
        
        # Sort queries with their original indices to retrieve results in the original order
        sorted_queries = sorted((time, i) for i, time in enumerate(queries))
        
        # Initialize result array with zeros
        result = [0] * len(queries)
        
        # Initialize counter for servers in the current window
        server_counter = Counter()
        
        # Initialize pointers for the sliding window
        left = 0
        right = 0
        
        # Process each query
        for query_time, query_index in sorted_queries:
            # Adjust the right pointer to include logs within the query window
            while right < len(logs) and logs[right][1] <= query_time:
                server_counter[logs[right][0]] += 1
                right += 1
            
            # Adjust the left pointer to exclude logs outside the query window
            while left < right and logs[left][1] < query_time - x:
                server_counter[logs[left][0]] -= 1
                if server_counter[logs[left][0]] == 0:
                    del server_counter[logs[left][0]]
                left += 1
            
            # Calculate the number of servers that did not receive any requests
            result[query_index] = n - len(server_counter)
        
        return result

# Example usage:
solution = Solution()
n = 3
logs = [[1,3],[2,6],[1,5]]
x = 5
queries = [10,11]
print(solution.countServers(n, logs, x, queries))  # Output: [1, 2]
78900