VOOZH about

URL: https://www.geeksforgeeks.org/dsa/queries-for-number-of-elements-on-right-and-left/

⇱ Queries for number of elements on right and left - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Queries for number of elements on right and left

Last Updated : 6 Feb, 2023

Given Q queries of three types where every query consists of a number. 
 

  1. Add element num on the left
  2. Add element num on the right
  3. Print the number of elements to the right an left of the given element num.


The task is to write a program that performs the above queries. 
Note: Elements in queries 1 and 2 are distinct and 0 <= num <= 105
Examples: 
 

Input: 
Q = 5 
Query of type 1: num = 3 
Query of type 2: num = 5 
Query of type 1: num = 2 
Query of type 1: num = 4 
Query of type 3: num = 3 
Output: element on the right: 1 element on the left: 2 
After query 1, the element positioning is 3 
After query 2, the element positioning is 35 
After query 3, the element positioning is 235 
After query 4, the element positioning is 4235 
So there is 1 element to the right and 2 elements on the left of 3 when 
query 3 is called. 
 


 


The following steps can be followed to solve the above problem. 
 

  • Initialize a variable left and right as 0, and two hash arrays position[] and mark[]. position[] is used to store the index of num on left and right and mark[] is used to mark if the num is on left or right.
  • For query-1, increase the count of left, and mark position[num] as left and mark[num] as 1.
  • For query-2, increase the count of right, and mark position[num] as right and mark[num] as 2
  • For query-3, check if the given number is present on right or left using mark[].
  • If the number is present on right, then the number of elements to the left of num will be (left-position[num]), and the number of elements to the right of num will be (position[num] - 1 + right).
  • If the number is present on left, then the number of elements to the right of num will be (right-position[num]), and the number of elements to the left of num will be (position[num] - 1 + *left).


Below is the implementation of the above approach: 
 

The number of elements to right of 3: 1
The number of elements to left of 3: 2

Time Complexity: O(1) for every query. 

Auxiliary Space: O(MAXN), where MAXN is 105.

Comment