题目:http://acm.hdu.edu.cn/showproblem.php?pid=1025
第一次写最长上升子序列不是写的这题,所以对于这个最长上升子序列的模板题也没什么好说的,主要坑点在于,如果答案是一road用单数..............
#include<bits/stdc++.h> #define mem(a,x) memset(a,x,sizeof(a)) #define sqrt(n) sqrt((double)n) #define pow(a,b) pow((double)a,(int)b) #define inf (1<<29) #define NN 100005 using namespace std; const double PI = acos(-1.0); typedef long long LL; int d[NN],a[NN]; int main() { int n; int kas = 1; while (cin>>n) { for ( int i = 1,p,r;i <= n;++i) { scanf("%d%d" ,&p,&r); a[p] = r; } int len = 1; d[1] = a[1]; for ( int i = 2;i <= n;++i) { if (a[i] > d[len]) { d[++len] = a[i]; } else { int p = lower_bound(d,d+len,a[i]) - d; d[p] = a[i]; } } printf("Case %d:\n" ,kas++); if (len == 1) puts( "My king, at most 1 road can be built." ); else printf( "My king, at most %d roads can be built.\n" ,len); puts("" ); } return 0; }