- import java.util.Arrays; 
- /** 
-  * Longest Increasing Sub-Sequence 
-  * @author Prateek 
-  */ 
- class LongestIncreasingSubsequence { 
-   
- 	private static int[] LIS;   
- 	private static int[] sol; //Array to retrive the sequence 
- 	static int tail=0;   //final element of sequence 
-   
- 	/** 
- 	 * Procedure to find LIS 
- 	 * @param arr : input array 
- 	 * @return longest value on increasing sub sequence 
- 	 */ 
- 	public static int lis(int[] arr){ 
- 		int len = arr.length ; 
-   
- 		LIS = new int[len]; 
- 		sol = new int[len] ;  
-   
-   
- 		LIS[0] = 1; //base case 
- 		int MAX_LIS=1;  // default value 
- 		int max; // gets max value for each i 
- 		for(int i=1;i < len ; i++) 
- 		{ 
- 			max=0; 
- 			for(int j=0 ; j<i ; j++) 
- 			{ 
- 				if(arr[i] > arr[j] && LIS[j] > max ) 
- 				{ 
- 						sol[i] = j ; //used to save 
- 						max = LIS[j]; //update max for value of i 
- 				} 
- 			} 
- 			LIS[i] = 1 + max ; 
-   
- 			if(LIS[i] > MAX_LIS){ 
- 				MAX_LIS = LIS[i]; 
- 				tail=i; 
- 			} 
- 		} 
-   
- 		printSequence(sol, arr); 
- 		System- . out- . println("Sequence length : " +-  MAX_LIS );
 
- 		return MAX_LIS ; 
- 	} 
-   
-   
- 	public static void printSequence(int[] sol , int[] arr){ 
- 		System- . out- . println("Sequence : ");
 
- 		for (int j = tail; j >= 0; j = sol[j]) 
- 			System- . out- . print(- arr [- j ]+"\t");
 
-   
- 	} 
-   
- 	public static void-  main (String[]-  args ) {
 
- 		int arr[] = {3, 2 , 7 , 3 , 4 , 9 , 8 , 12 , 5}; 
- 		lis(arr); 
- 	} 
- } 
				aW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci8qKgogKiBMb25nZXN0IEluY3JlYXNpbmcgU3ViLVNlcXVlbmNlCiAqIEBhdXRob3IgUHJhdGVlawogKi8KY2xhc3MgTG9uZ2VzdEluY3JlYXNpbmdTdWJzZXF1ZW5jZSB7CgoJcHJpdmF0ZSBzdGF0aWMgaW50W10gTElTOyAgCglwcml2YXRlIHN0YXRpYyBpbnRbXSBzb2w7IC8vQXJyYXkgdG8gcmV0cml2ZSB0aGUgc2VxdWVuY2UKCXN0YXRpYyBpbnQgdGFpbD0wOyAgIC8vZmluYWwgZWxlbWVudCBvZiBzZXF1ZW5jZQoKCS8qKgoJICogUHJvY2VkdXJlIHRvIGZpbmQgTElTCgkgKiBAcGFyYW0gYXJyIDogaW5wdXQgYXJyYXkKCSAqIEByZXR1cm4gbG9uZ2VzdCB2YWx1ZSBvbiBpbmNyZWFzaW5nIHN1YiBzZXF1ZW5jZQoJICovCglwdWJsaWMgc3RhdGljIGludCBsaXMoaW50W10gYXJyKXsKCQlpbnQgbGVuID0gYXJyLmxlbmd0aCA7CgoJCUxJUyA9IG5ldyBpbnRbbGVuXTsKCQlzb2wgPSBuZXcgaW50W2xlbl0gOyAKCgkJQXJyYXlzLmZpbGwoc29sLCAtMSk7CgoJCUxJU1swXSA9IDE7IC8vYmFzZSBjYXNlCgkJaW50IE1BWF9MSVM9MTsgIC8vIGRlZmF1bHQgdmFsdWUKCQlpbnQgbWF4OyAvLyBnZXRzIG1heCB2YWx1ZSBmb3IgZWFjaCBpCgkJZm9yKGludCBpPTE7aSA8IGxlbiA7IGkrKykKCQl7CgkJCW1heD0wOwoJCQlmb3IoaW50IGo9MCA7IGo8aSA7IGorKykKCQkJewoJCQkJaWYoYXJyW2ldID4gYXJyW2pdICYmIExJU1tqXSA+IG1heCApCgkJCQl7CgkJCQkJCXNvbFtpXSA9IGogOyAvL3VzZWQgdG8gc2F2ZQoJCQkJCQltYXggPSBMSVNbal07IC8vdXBkYXRlIG1heCBmb3IgdmFsdWUgb2YgaQoJCQkJfQoJCQl9CgkJCUxJU1tpXSA9IDEgKyBtYXggOwoKCQkJaWYoTElTW2ldID4gTUFYX0xJUyl7CgkJCQlNQVhfTElTID0gTElTW2ldOwoJCQkJdGFpbD1pOwoJCQl9CgkJfQoKCQlwcmludFNlcXVlbmNlKHNvbCwgYXJyKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNlcXVlbmNlIGxlbmd0aCA6ICIgKyBNQVhfTElTKTsKCQlyZXR1cm4gTUFYX0xJUyA7Cgl9CgoJCglwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTZXF1ZW5jZShpbnRbXSBzb2wgLCBpbnRbXSBhcnIpewoJCVN5c3RlbS5vdXQucHJpbnRsbigiU2VxdWVuY2UgOiAiKTsKCQlmb3IgKGludCBqID0gdGFpbDsgaiA+PSAwOyBqID0gc29sW2pdKQoJCQlTeXN0ZW0ub3V0LnByaW50KGFycltqXSsiXHQiKTsKCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKCX0KCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJaW50IGFycltdID0gezMsIDIgLCA3ICwgMyAsIDQgLCA5ICwgOCAsIDEyICwgNX07CgkJbGlzKGFycik7Cgl9Cn0=