4642631510234567891018876543219589231746 Sample Output3914题目意思和输入的测试数据难理解,第一行输入一个数N代表几组测试数据,然后输入P代表每一组测试数据有几个数。比如第一组p=6输入的数据为4 2 6 3 1 5 依次与 1 2 3 4 5 6想对应,即连接起来,但是任何两条线都不能交叉,求最多的路的条数。#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int lis[40005];//存放longest increasing subsequence的数组int len;int Binary_Search(int n) //二分查找,时间复杂度为对数阶{ int low,high,mid; low = 1; high = len; while(low<high) { mid = (low+high)/2; if(lis[mid]>=n) high = mid; else low = mid+1; //只让下届做改变 } return low;}int main(){ int n,p,a; scanf("%d",&n); //n组测试数据 while(n--) { scanf("%d",&p); len = 0; lis[len]=0; while(p--) { scanf("%d",&a); if(a>lis[len]) { len++; lis[len]=a; } else { int pos = Binary_Search(a); lis[pos]=a; } } printf("%d/n",len); } return 0;}
新闻热点
疑难解答