import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String[] s = in.nextLine().split(" "); int[] arr = Arrays.stream(s).mapToInt(Integer::valueOf).toArray(); // 最长上升子序列的长度LIS-二分查找 int[] tmp = new int[arr.length]; int tail = 0; for (int n : arr) { int l = 0, r = tail; // 左闭右开找左边界 while (l < r) { int m = l + (r - l) / 2; if (tmp[m] < n) { l = m + 1; } else { r = m; } } tmp[l] = n; if (l == tail) tail++; } System.out.println(tail); } }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); String[] str = scanner.nextLine().split(" "); //int len = str.length; int[] arr = new int[str.length]; for(int i=0;i<str.length;i++){ arr[i]=Integer.parseInt(str[i]); } int max = lengthOfLIS(arr); System.out.println(max); } static int lengthOfLIS(int[] arr){ //数组定义:dp[i]为从0到i的最长递增子序列值,base case :自身并入计算结果中 int[] dp = new int[arr.length]; Arrays.fill(dp,1); int max = arr[0]; for(int i = 0;i < arr.length; i++){ for(int j = 0; j <= i; j++){ if(arr[i] > arr[j]){ dp[i] = Math.max(dp[j] + 1, dp[i]); } } max = Math.max(dp[i], max); } return max; } }
nums = list(map(int,input().split())) l,r = 0,0 res = 1 for i in range(len(nums)-1): if nums[i+1]>nums[i]: r +=1 res = max(res,r-l+1) else: r+=1 l+=1 print(res)