VOOZH about

URL: https://www.geeksforgeeks.org/dsa/queries-number-distinct-elements-subarray/

⇱ Queries for number of distinct elements in a subarray - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Queries for number of distinct elements in a subarray

Last Updated : 23 Jul, 2025

Given a array 'a[]' of size n and number of queries q. Each query can be represented by two integers l and r. Your task is to print the number of distinct integers in the subarray l to r. Given a[i] <= 106 Examples:

Input : a[] = {1, 1, 2, 1, 3}
 q = 3
 0 4
 1 3
 2 4
Output :3
 2
 3
In query 1, number of distinct integers
in a[0...4] is 3 (1, 2, 3)
In query 2, number of distinct integers 
in a[1..3] is 2 (1, 2)
In query 3, number of distinct integers 
in a[2..4] is 3 (1, 2, 3)

The idea is to use Binary Indexed Tree 

  1. Step 1 : Take an array last_visit of size 10^6 where last_visit[i] holds the rightmost index of the number i in the array a. Initialize this array as -1.
  2. Step 2 : Sort all the queries in ascending order of their right end r.
  3. Step 3 : Create a Binary Indexed Tree in an array bit[]. Start traversing the array 'a' and queries simultaneously and check if last_visit[a[i]] is -1 or not. If it is not, update the bit array with value -1 at the idx last_visit[a[i]].
  4. Step 4 : Set last_visit[a[i]] = i and update the bit array bit array with value 1 at idx i.
  5. Step 5 : Answer all the queries whose value of r is equal to i by querying the bit array. This can be easily done as queries are sorted.
Output:
3
2
3

Time Complexity: O((n+q)*log(n))

Auxiliary Space: O(n+q+MAX)

Comment