⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1025.cpp

📁 ZJU ACM 1010排名第一的程序. 1025的高效程序
💻 CPP
字号:
#include <stdio.h>

const int N = 5000, L = 1023;

int a[N+1], n;

struct get {
  int l;
  bool b[128];
  char buf[L+1];
  get() {
    for (int i='0'; i<='9'; i++) b[i]=1;
    l=fread(buf,1,L,stdin); buf[l]=0; l=0;
  }
  int operator()() {
    int r=0, ch;
    while(b[ch=buf[l++]])r=10*r+(ch&0xF);
    if (ch==0) {
      l=fread(buf,1,L,stdin); buf[l]=0; l=0;
      while(b[ch=buf[l++]])r=10*r+(ch&0xF);
    }
    return r;
  }
} geti;

int nlis() {
  int l, h, m, k, t=0;
  a[0]&=0xFFFF;
  for (int i=1; i<n; i++) {
    l=0; h=t; k=a[i]&0xFFFF;
    while (l<=h) k<=a[m=l+h>>1]?(h=m-1):(l=m+1);
    a[l]=k; t>?=l;
  }
  return t+1;
}

void sort(int left, int right) {
  if (left<right) {
    int l=left, h=right, v=a[l];
    while (l<h) {
      while(l<h&&v>=a[h])h--; if(l<h)a[l++]=a[h];
      while(l<h&&a[l]>=v)l++; if(l<h)a[h--]=a[l];
    }
    a[h]=v; sort(left,h-1); sort(h+1,right);
  }
}

int main() {
  int t=geti();
  while (t--) {
    n=geti();
    for (int i=0; i<n; i++) a[i]=geti()<<16|geti();
    sort(0,n-1);
    printf("%d\n",nlis());
  }
  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -