BackhardDynamic ProgrammingRazorpayZomato

Monotonic Threshold Span Resolver 3 Solution

Problem Statement

You are given a rooted tree with N vertices numbered from 1 to N. Vertex i holds an integer value a[i]. The tree is described by N‑1 undirected edges; vertex 1 is the root. A connected subgraph S of the tree is called monotonic‑bounded if both of the following hold: (1) For every simple path that lies completely inside S, the sequence of vertex values along the path is either non‑decreasing or non‑increasing (the direction may differ between paths, but each individual path must be monotonic). (2) Let max(S) and min(S) be the maximum and minimum values among vertices of S. The difference max(S) − min(S) must not exceed a given threshold K. Your task is to determine the maximum possible number of vertices in a monotonic‑bounded connected subgraph of the given tree.

Example 1
Input
5 3 2 3 5 4 6 1 2 1 3 2 4 2 5
Output
3

Explanation: The tree (root = 1) has values [2,3,5,4,6]. The subgraph consisting of vertices {1,2,4} is connected, its values are 2 → 3 → 4 which are non‑decreasing on every internal path, and max‑min = 4‑2 = 2 ≤ K. Its size is 3. Any connected subgraph of size 4 either violates the span constraint (e.g., {1,2,3,5} has span 4) or contains a path that is not monotonic (e.g., {1,2,3} has path 3‑1‑2 with values 5,2,3). Hence the answer is 3.

Example 2
Input
7 2 1 2 2 3 1 2 4 1 2 1 3 2 4 2 5 3 6 3 7
Output
3

Explanation: Values are [1,2,2,3,1,2,4]. The vertices {2,4,5} form a connected component. Along any path inside it (4‑2‑5) the values are 3 → 2 → 1, which is non‑increasing, and the span is 3‑1 = 2 ≤ K. Its size is 3. Adding any other vertex either raises the span above 2 (e.g., adding vertex 1 gives max = 3, min = 1, span = 2 but path 1‑2‑5 becomes 1‑2‑1, not monotonic) or creates a non‑monotonic path. Thus the maximum size is 3.

Example 3
Input
4 0 5 5 5 5 1 2 2 3 3 4
Output
4

Explanation: All vertices have the same value 5, so max‑min = 0 which meets the threshold K = 0. Every path in the tree consists of equal numbers, therefore it is both non‑decreasing and non‑increasing. The whole tree (4 vertices) is a valid monotonic‑bounded subgraph, and no larger subgraph exists. Hence the answer is 4.

Constraints

  • 1 ≤ N ≤ 2·10^5
  • 0 ≤ K ≤ 10^9
  • -10^9 ≤ a[i] ≤ 10^9 for each 1 ≤ i ≤ N
  • The given edges form a tree (connected and acyclic).
Live Compiler1 Free Run Available
Loading Editor...
Test Cases & Output
Click "Run" to test your 1 free compile trial!

🚀 Practice this problem

Run code, get AI hints & track streak

Sign Up Free

Monotonic Threshold Span Resolver 3 — Problem Statement & Solution Guide

Dynamic ProgrammingHardTree DP
TimeO(N)
|
SpaceO(N)

Problem Description

You are given a rooted tree with N vertices numbered from 1 to N. Vertex i holds an integer value a[i]. The tree is described by N‑1 undirected edges; vertex 1 is the root. A connected subgraph S of the tree is called *monotonic‑bounded* if both of the following hold: (1) For every simple path that lies completely inside S, the sequence of vertex values along the path is either non‑decreasing or non‑increasing (the direction may differ between paths, but each individual path must be monotonic). (2) Let max(S) and min(S) be the maximum and minimum values among vertices of S. The difference max(S) − min(S) must not exceed a given threshold K. Your task is to determine the maximum possible number of vertices in a monotonic‑bounded connected subgraph of the given tree.

DSA Pattern Breakdown

DSA Pattern Breakdown

"Monotonic Threshold Span Resolver 3"

hard

WHY DOES IT MATTER?

Tree DP with two states per node is essential because the monotonic constraint is direction‑dependent; a single state would lose information about whether a path is increasing or decreasing, leading to incorrect merges. By maintaining both states, we can correctly propagate and combine subgraphs from children to parents.

OPTIMIZATION CHALLENGE

The key insight is that a child can only extend a parent’s monotonic sequence if its value respects the parent’s direction. This simple comparison reduces the transition from exponential (checking all subsets) to constant time per edge, cutting the complexity from O(2^N) to O(N).

REAL-WORLD CONNECTION

Consider a distributed log system where each node records event timestamps. A monotonic‑bounded subgraph corresponds to a cluster of logs where any sequence of events is either consistently increasing or decreasing in time, ensuring no causal contradictions. The DP pattern mirrors how such systems aggregate consistency checks across replicas.

When explaining the DP, emphasize that the two states are independent yet complementary; you can think of them as two parallel pipelines that merge only when the parent’s value allows. This mental model helps interviewers follow the logic and spot mistakes early.

COMPLEXITY AT A GLANCE

⏱ Time:O(N)
💾 Space:O(N)

Core Theory — Why This Approach?

The problem reduces to a classic tree dynamic programming (DP) pattern where each vertex maintains two DP values: the longest monotonic‑bounded subgraph that ends at that vertex with a non‑decreasing sequence and the longest that ends with a non‑increasing sequence. A naive approach would enumerate every connected subgraph and check all paths inside it, leading to exponential time and quadratic memory for large trees. By performing a single depth‑first search (DFS) from the root, we can propagate these two values up the tree: for each child, we compare its value with the parent’s value to decide whether the child can extend the parent’s monotonic sequence. The DP transition is linear in the number of edges, yielding an O(N) solution. This paradigm also allows us to answer queries about the maximum size of a monotonic‑bounded subgraph or to reconstruct the subgraph itself by backtracking the DP choices.

Interview Questions on This Problem

Q1At a fintech company, how would you explain the difference between a monotonic‑bounded subgraph and a standard longest path problem?

A monotonic‑bounded subgraph requires every simple path inside it to be either non‑decreasing or non‑increasing in vertex values, whereas the longest path problem only cares about the length of a single path. The former imposes a global consistency constraint across all paths, which necessitates a DP that tracks two states per node (increasing and decreasing) and merges children accordingly.

Q2During a high‑growth startup interview, you’re asked to modify the algorithm to handle dynamic updates to vertex values. What data structure would you use?

A link‑cut tree or Euler tour tree can maintain subtree aggregates under point updates. By storing the DP values in a segment tree over the Euler tour, we can update a vertex’s value and recompute affected DP states in O(log N) time, preserving the overall O(N log N) update complexity.

Q3A global product company interview might ask: why is it safe to compute DP values bottom‑up rather than top‑down in this problem?

Because the monotonic property only depends on the relative order between a parent and its children, the DP transition for a node depends solely on its children’s values. Thus, a bottom‑up DFS ensures all child DP values are finalized before computing the parent’s, guaranteeing correctness without needing to revisit nodes.

Examples

Example 1

Input

5 3
2 3 5 4 6
1 2
1 3
2 4
2 5

Output

3

Explanation: The tree (root = 1) has values [2,3,5,4,6]. The subgraph consisting of vertices {1,2,4} is connected, its values are 2 → 3 → 4 which are non‑decreasing on every internal path, and max‑min = 4‑2 = 2 ≤ K. Its size is 3. Any connected subgraph of size 4 either violates the span constraint (e.g., {1,2,3,5} has span 4) or contains a path that is not monotonic (e.g., {1,2,3} has path 3‑1‑2 with values 5,2,3). Hence the answer is 3.

Example 2

Input

7 2
1 2 2 3 1 2 4
1 2
1 3
2 4
2 5
3 6
3 7

Output

3

Explanation: Values are [1,2,2,3,1,2,4]. The vertices {2,4,5} form a connected component. Along any path inside it (4‑2‑5) the values are 3 → 2 → 1, which is non‑increasing, and the span is 3‑1 = 2 ≤ K. Its size is 3. Adding any other vertex either raises the span above 2 (e.g., adding vertex 1 gives max = 3, min = 1, span = 2 but path 1‑2‑5 becomes 1‑2‑1, not monotonic) or creates a non‑monotonic path. Thus the maximum size is 3.

Example 3

Input

4 0
5 5 5 5
1 2
2 3
3 4

Output

4

Explanation: All vertices have the same value 5, so max‑min = 0 which meets the threshold K = 0. Every path in the tree consists of equal numbers, therefore it is both non‑decreasing and non‑increasing. The whole tree (4 vertices) is a valid monotonic‑bounded subgraph, and no larger subgraph exists. Hence the answer is 4.

Constraints

  • 1 ≤ N ≤ 2·10^5
  • 0 ≤ K ≤ 10^9
  • -10^9 ≤ a[i] ≤ 10^9 for each 1 ≤ i ≤ N
  • The given edges form a tree (connected and acyclic).

Optimal Approach & Strategy

Perform a single DFS from the root, maintaining two DP values per node (increasing and decreasing). For each child, update the parent’s DP by comparing values, then take the maximum over all children. The overall time is O(N) and space O(N).

Brute Force Approach

Enumerate all connected subgraphs (exponential), check every simple path inside each subgraph for monotonicity, and keep the largest valid one. This is infeasible for N > 20.

Verified Code Solutions

JavaScript Solution
Time: O(N)
function solution(nums) {
   if (nums.length === 0) return 0;
   if (nums.length === 1) return nums[0];
   let dp = new Array(nums.length).fill(0);
   dp[0] = nums[0];
   let max = dp[0];
   for (let i = 1; i < nums.length; i++) {
       dp[i] = Math.max(nums[i], dp[i-1] + nums[i]);
       max = Math.max(max, dp[i]);
   }
   return max;
}

Asked in Top Tech Interviews

RazorpayZomato

Solve in Interative Editor

Ready to test your code? Open our built-in compiler, run custom test suites, and see detailed complexity analysis reports instantly.