Posts

Get Min from a subarray

  import java . util .* ; public class GetMIN {     public static int tree [];     public static void init ( int n ) {         tree = new int [ 4 * n ];     }     public static void Construct ( int arr [], int i , int start , int end ) {         if ( start == end ) {             tree [ i ] = arr [ start ];             return ;         }         int mid = ( start + end ) / 2 ;         Construct ( arr , 2 * i + 1 , start , mid );         Construct ( arr , 2 * i + 2 , mid + 1 , end );         tree [ i ] = Math . min ( tree [ 2 * i + 1 ], tree [ 2 * i + 2 ]);     }     public static void Print () {         for ( int i = 0 ; i < tree . length ; i ++...

Get Max from a subarray

  import java . util .* ; //MAX ELEMENT IN A SUBARRAY public class GetMAX {     static int tree [];     public static void init ( int n ) {         tree = new int [ 4 * n ];     }     public static void Construct ( int arr [], int i , int start , int end ) {         if ( start == end ) {             tree [ i ] = arr [ start ];             return ;         }         int mid = ( start + end ) / 2 ;         Construct ( arr , 2 * i + 1 , start , mid );         Construct ( arr , 2 * i + 2 , mid + 1 , end );         tree [ i ] = Math . max ( tree [ 2 * i + 1 ], tree [ 2 * i + 2 ]);     }     public static void Print () {         for ( int i = 0 ; i < ...

Update ST

  public class UpdateST {     public static int tree [];     public static void init ( int n ) {         tree = new int [ 4 * n ];     }     public static int construct ( int arr [], int i , int start , int end ) {         if ( start == end ) {             tree [ i ] = arr [ start ];             return arr [ start ];         }         int mid = ( start + end ) / 2 ;         construct ( arr , 2 * i + 1 , start , mid );         construct ( arr , 2 * i + 2 , mid + 1 , end );         tree [ i ] = tree [ 2 * i + 1 ] + tree [ 2 * i + 2 ];         return tree [ i ];     }     public static void Print () {         for ( int i = 0 ; i ...

Query on a ST

  public class QueryonST {     public static int tree [];     public static void init ( int n ) {         tree = new int [ 4 * n ];     }     public static int Construct ( int arr [], int i , int start , int end ) {         if ( start == end ) {             tree [ i ] = arr [ start ];             return arr [ start ];         }         int mid = ( start + end ) / 2 ;         Construct ( arr , 2 * i + 1 , start , mid );         Construct ( arr , 2 * i + 2 , mid + 1 , end );         tree [ i ] = tree [ 2 * i + 1 ] + tree [ 2 * i + 2 ];         return tree [ i ];     }     public static void Print () {         for ( int i = 0 ; i ...

Segment trees(CONSTRUCTION)

  /**  * construction  */ public class construction {     public static int tree [];     public static void init ( int n ) {         tree = new int [ 4 * n ];     }     public static int constructST ( int arr [], int i , int start , int end ) {         if ( start == end ) {             tree [ i ] = arr [ start ];             return arr [ start ];         }         int mid = ( start + end ) / 2 ;         constructST ( arr , 2 * i + 1 , start , mid );         constructST ( arr , 2 * i + 2 , mid + 1 , end );         tree [ i ] = tree [ 2 * i + 1 ] + tree [ 2 * i + 2 ];         return tree [ i ];     }     public static void Print () {   ...

BOX STACKING

  /**  * BoxStacking  */ import java . util .* ; public class BoxStacking {       public static int maxHeight ( int [][] cuboids ){         int n = cuboids . length ;         for ( int i = 0 ; i < n ; i ++ ) {             Arrays . sort ( cuboids [ i ]);         }                 Arrays . sort ( cuboids , ( a , b ) -> {             if ( a [ 0 ] != b [ 0 ])                 return Integer . compare ( a [ 0 ], b [ 0 ]);             if ( a [ 1 ] != b [ 1 ])                 return Integer . compare ( a [ 1 ], b [ 1 ]);             return Integer . compare ( a [ 2 ], b [ 2 ]);         });         ...

MOUNTAIN ARRAY

  import java . util .* ; public class MountainArray {     public static int minimumMountainRemovals ( int nums []) {         int n = nums . length ;         int lis [] = new int [ n ];         for ( int i = 0 ; i < n ; i ++ ) {             int val = nums [ i ];             lis [ i ] = 1 ;             for ( int j = i - 1 ; j >= 0 ; j -- ) {                 if ( nums [ j ] < val ) {                     lis [ i ] = Math . max ( lis [ i ], lis [ j ] + 1 );                 }             }         }         int lds [] = new int [ n ];         for ( int i = n - ...