diff --git a/src/main/java/g3701_3800/s3748_count_stable_subarrays/Solution.java b/src/main/java/g3701_3800/s3748_count_stable_subarrays/Solution.java
new file mode 100644
index 000000000..cc0642ada
--- /dev/null
+++ b/src/main/java/g3701_3800/s3748_count_stable_subarrays/Solution.java
@@ -0,0 +1,43 @@
+package g3701_3800.s3748_count_stable_subarrays;
+
+// #Hard #Array #Binary_Search #Prefix_Sum #Senior_Staff #Weekly_Contest_476
+// #2026_04_26_Time_9_ms_(100.00%)_Space_183.68_MB_(43.30%)
+
+public class Solution {
+ public long[] countStableSubarrays(int[] nums, int[][] queries) {
+ int n = nums.length;
+ long[] preSum = new long[n + 1];
+ int[] idx = new int[n];
+ int[] end = new int[n];
+ int cnt = 0;
+ int prv = -1;
+ for (int i = 0; i < n; i++) {
+ if (nums[i] >= prv) {
+ cnt++;
+ } else {
+ cnt = 1;
+ }
+ prv = nums[i];
+ preSum[i + 1] = preSum[i] + cnt;
+ idx[i] = cnt - 1;
+ }
+ end[n - 1] = n - 1;
+ for (int i = n - 2; i >= 0; i--) {
+ if (idx[i] + 1 == idx[i + 1]) {
+ end[i] = end[i + 1];
+ } else {
+ end[i] = i;
+ }
+ }
+ long[] ans = new long[queries.length];
+ for (int l = 0; l < queries.length; l++) {
+ int i = queries[l][0];
+ int j = queries[l][1];
+ long res = preSum[j + 1] - preSum[i];
+ int endIdx = Math.min(end[i], j);
+ res -= (long) (endIdx - i + 1) * idx[i];
+ ans[l] = res;
+ }
+ return ans;
+ }
+}
diff --git a/src/main/java/g3701_3800/s3748_count_stable_subarrays/readme.md b/src/main/java/g3701_3800/s3748_count_stable_subarrays/readme.md
new file mode 100644
index 000000000..ed388d19a
--- /dev/null
+++ b/src/main/java/g3701_3800/s3748_count_stable_subarrays/readme.md
@@ -0,0 +1,55 @@
+3748\. Count Stable Subarrays
+
+Hard
+
+You are given an integer array `nums`.
+
+A ****non-empty subarrays**** of `nums` is called **stable** if it contains **no inversions**, i.e., there is no pair of indices `i < j` such that `nums[i] > nums[j]`.
+
+You are also given a **2D integer array** `queries` of length `q`, where each queries[i] = [li, ri] represents a query. For each query [li, ri], compute the number of **stable subarrays** that lie entirely within the segment nums[li..ri].
+
+Return an integer array `ans` of length `q`, where `ans[i]` is the answer to the ith query.
+
+**Note**:
+
+* A single element subarray is considered stable.
+
+**Example 1:**
+
+**Input:** nums = [3,1,2], queries = [[0,1],[1,2],[0,2]]
+
+**Output:** [2,3,4]
+
+**Explanation:**
+
+* For `queries[0] = [0, 1]`, the subarray is `[nums[0], nums[1]] = [3, 1]`.
+ * The stable subarrays are `[3]` and `[1]`. The total number of stable subarrays is 2.
+* For `queries[1] = [1, 2]`, the subarray is `[nums[1], nums[2]] = [1, 2]`.
+ * The stable subarrays are `[1]`, `[2]`, and `[1, 2]`. The total number of stable subarrays is 3.
+* For `queries[2] = [0, 2]`, the subarray is `[nums[0], nums[1], nums[2]] = [3, 1, 2]`.
+ * The stable subarrays are `[3]`, `[1]`, `[2]`, and `[1, 2]`. The total number of stable subarrays is 4.
+
+Thus, `ans = [2, 3, 4]`.
+
+**Example 2:**
+
+**Input:** nums = [2,2], queries = [[0,1],[0,0]]
+
+**Output:** [3,1]
+
+**Explanation:**
+
+* For `queries[0] = [0, 1]`, the subarray is `[nums[0], nums[1]] = [2, 2]`.
+ * The stable subarrays are `[2]`, `[2]`, and `[2, 2]`. The total number of stable subarrays is 3.
+* For `queries[1] = [0, 0]`, the subarray is `[nums[0]] = [2]`.
+ * The stable subarray is `[2]`. The total number of stable subarrays is 1.
+
+Thus, `ans = [3, 1]`.
+
+**Constraints:**
+
+* 1 <= nums.length <= 105
+* 1 <= nums[i] <= 105
+* 1 <= queries.length <= 105
+* queries[i] = [li, ri]
+* 0 <= li <= ri <= nums.length - 1
\ No newline at end of file
diff --git a/src/test/java/g3701_3800/s3748_count_stable_subarrays/SolutionTest.java b/src/test/java/g3701_3800/s3748_count_stable_subarrays/SolutionTest.java
new file mode 100644
index 000000000..0e9447168
--- /dev/null
+++ b/src/test/java/g3701_3800/s3748_count_stable_subarrays/SolutionTest.java
@@ -0,0 +1,24 @@
+package g3701_3800.s3748_count_stable_subarrays;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import org.junit.jupiter.api.Test;
+
+class SolutionTest {
+ @Test
+ void countStableSubarrays() {
+ assertThat(
+ new Solution()
+ .countStableSubarrays(
+ new int[] {3, 1, 2}, new int[][] {{0, 1}, {1, 2}, {0, 2}}),
+ equalTo(new long[] {2L, 3L, 4L}));
+ }
+
+ @Test
+ void countStableSubarrays2() {
+ assertThat(
+ new Solution().countStableSubarrays(new int[] {2, 2}, new int[][] {{0, 1}, {0, 0}}),
+ equalTo(new long[] {3L, 1L}));
+ }
+}