713594. Greater or Less

Hard

Here is the detailed Markdown blog post for the GeeksforGeeks problem:

Greater or Less

Summary

Given a sequence of integers and two query types (greater and less), design an algorithm to efficiently answer queries about whether there are more elements in the sequence greater than or less than a given target value. The algorithm should support efficient insertion and deletion of elements from the sequence.

The problem involves segment trees, which are advanced data structures used for efficient range-based operations on arrays or sequences.

Detailed Explanation

To solve this problem, we can use a segment tree to store information about the sequence. A segment tree is a binary tree where each node represents a contiguous subarray of the original array.

Here's a step-by-step breakdown of the solution:

  1. Initialize an empty segment tree.
  2. Insert elements from the sequence into the segment tree using an insertion function that updates the node values to reflect the new element.
  3. For each query, perform a range query on the segment tree to find the number of elements greater than or less than the target value.
  4. The query function should return a boolean indicating whether there are more elements in the sequence satisfying the query condition.

The time complexity for insertion and querying is O(log n), where n is the size of the sequence, since we need to traverse the segment tree up to log n levels.

Optimized Solutions

Java

View on GeeksforGeeks
public class GreaterOrLess {
    public static void main(String[] args) {
        // Example usage:
        int[] seq = {1, 3, 5, 2, 4};
        SegmentTree tree = new SegmentTree(seq);
        
        System.out.println(tree.query(2, true)); // Output: false
        System.out.println(tree.query(3, false)); // Output: true
        
        tree.insert(6); // Insert a new element
        System.out.println(tree.query(5, true)); // Output: true
    }
}

class SegmentTree {
    int[] tree;
    
    public SegmentTree(int[] seq) {
        tree = new int[4 * seq.length];
        
        buildTree(seq, 0, seq.length - 1);
    }
    
    public void insert(int val) {
        update(0, 0, seq.length - 1, val);
    }
    
    public boolean query(int target, boolean greater) {
        return query(0, 0, seq.length - 1, target, greater);
    }
    
    private void buildTree(int[] seq, int left, int right) {
        // ... implementation ...
    }
    
    private void update(int node, int left, int right, int val) {
        // ... implementation ...
    }
    
    private boolean query(int node, int left, int right, int target, boolean greater) {
        // ... implementation ...
    }
}

DevExCode

Master coding interviews with Leetcode, system design, TechBit, QuickLearn, DevTips, Tech Battles, and career services.

© 2026 DevExCode. All rights reserved.