编辑代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
  // 读取输入并解析JSON数组
  // 输入格式:[[x1,y1], [x2,y2], ...]
  const arr = JSON.parse(await readline());

  // 对数组进行排序:
  // 1. 首先按照x坐标降序排序
  // 2. 如果x坐标相同,则按照y坐标降序排序
  arr.sort((a, b) => {
    if (a[0] === b[0]) {
      return b[1] - a[1];
    } else {
      return b[0] - a[0];
    }
  });

  // 初始化最长递增子序列的长度
  let ans = 0;

  // 创建dp数组,dp[i]表示以第i个元素结尾的最长递增子序列长度
  // 初始值都设为1,因为每个元素本身就是一个长度为1的子序列
  const dp = new Array(arr.length).fill(1);

  // 动态规划求解最长递增子序列
  for (let i = 1; i < arr.length; i++) {
    // 对于每个位置i,检查它之前的所有位置j
    for (let j = 0; j < i; j++) {
      // 如果当前元素的y坐标小于之前某个元素的y坐标
      // 说明可以形成递增子序列
      if (arr[i][1] < arr[j][1]) {
        // 更新dp[i]为当前值和dp[j]+1中的较大值
        dp[i] = Math.max(dp[i], dp[j] + 1);
      }
    }
  }

  // 输出dp数组中的最大值,即为最长递增子序列的长度
  console.log(Math.max(...dp));
})();