Advertisement
GokulDeep

OnesOnly

Oct 20th, 2024
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.82 KB | None | 0 0
  1. package com.gokul.demo.Success.Stack;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.ArrayList;
  7. import java.util.Collections;
  8. import java.util.List;
  9. import java.util.Stack;
  10.  
  11. public class NeedAllOnes {
  12.  
  13.     public static void main(String[] args) throws IOException {
  14.         // Initialize BufferedReader to read input from the console
  15.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  16.  
  17.         // Read the first line to get n and m (dimensions of the matrix)
  18.         String[] dimensions = br.readLine().trim().split(" ");
  19.         int n = Integer.parseInt(dimensions[0]);
  20.         int m = Integer.parseInt(dimensions[1]);
  21.  
  22.         // Create a 2D array to store the binary matrix
  23.         long[][] matrix = new long[n][m];
  24.  
  25.         // Read the next n lines to get the binary values for each row
  26.         for (int i = 0; i < n; i++) {
  27.             String[] rowValues = br.readLine().trim().split(" ");
  28.             for (int j = 0; j < m; j++) {
  29.                 matrix[i][j] = Integer.parseInt(rowValues[j]);
  30.             }
  31.         }
  32.  
  33.         for (int i = 0; i < m; i++) {
  34.             for (int j = 1; j < n; j++) {
  35.                 if (matrix[j][i] != 0) {
  36.                     if (matrix[j - 1][i] > 0) {
  37.                         matrix[j][i] = matrix[j - 1][i] + 1;
  38.                     }
  39.                 }
  40.             }
  41.         }
  42.  
  43.         long ans = 0;
  44.         for (int i = m - 1; i > 0; i--) {
  45.             ans = Math.max(ans, histogram(matrix[i], n));
  46.         }
  47.  
  48.         System.out.println(ans);
  49.     }
  50.  
  51.     public static long histogram(long[] arr, int n) {
  52.         Stack<Long> stk = new Stack<>();
  53.         List<Long> nse = new ArrayList<>(Collections.nCopies(n, (long) n));
  54.  
  55.         List<Long> pse = new ArrayList<>(Collections.nCopies(n, -1L));
  56.         stk.push(0l);
  57.  
  58.         for (int i = 1; i < n; i++) {
  59.             while (!stk.empty() && arr[i] < arr[stk.peek().intValue()]) {
  60.                 nse.set(stk.peek().intValue(), (long) i);
  61.                 stk.pop();
  62.             }
  63.             stk.push((long) i);
  64.         }
  65.  
  66.         System.out.println(nse);
  67.  
  68.         stk.clear();
  69.  
  70.         stk.push((long) n - 1);
  71.  
  72.         for (int i = n - 2; i >= 0; i--) {
  73.             while (!stk.empty() && arr[i] < arr[stk.peek().intValue()]) {
  74.                 pse.set(stk.peek().intValue(), (long) i);
  75.                 stk.pop();
  76.             }
  77.             stk.push((long) i);
  78.         }
  79.  
  80.         System.out.println(pse);
  81.  
  82.         long maxVal = Integer.MIN_VALUE;
  83.  
  84.         for (int i = 0; i < n; i++) {
  85.             long ns = nse.get(i);
  86.             long ps = pse.get(i);
  87.  
  88.             maxVal = Math.max(maxVal, arr[i] * (ns - ps - 1));
  89.         }
  90.  
  91.         System.out.println("MX --> " + maxVal);
  92.  
  93.         return maxVal;
  94.     }
  95. }
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement