//题目连接http://acm.hdu.edu.cn/showproblem.php?pid=1025
//这里题目要特别注意了,会做LIS的,但是如何想到这个题目就是LIS很重要.
//这是需要在ACM的过程中培养的一种很重要的能力.举一反三...能够很快归类.
//如何将本题与LIS联系起来:
//若3->8,那么4-7的任何一个城市都不可以连接.即LIS中1,2,8,3,4,5,6,7...;若要8的话后面的比8小的都不可以.
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<math.h>
#include<string.h>
#include<algorithm>
const int inf = 0x3f3f3f;
using namespace std;
int r,c[500001],a[500001],n;
int dich(int x , int y)
{
int left = 1,right = y;
while(right >= left)
{
int mid = (right+left)/2;
if(x > c[mid])left = mid+1;
else right = mid-1;
}
r = max(r,left);
return left;
}
void LIS(int a[])
{
r = 1 ; c[1] = a[0];
for(int i = 1 ; i < n ; i++)
{
c[dich(a[i],r)] = a[i];
}
}
int main()
{
int t = 0 ;
while(scanf("%d",&n) != EOF)
{
t++;
memset(c,0,sizeof(c));
int mm,nn;
for(int i = 0 ; i < n ; i++)
{
scanf("%d%d",&mm,&nn);
a[mm-1] = nn-1;//还有这么一个思想.最开始的时候是想的是调用快排.为嘛会超时还不知道.
} //这样搞例如1->6 那么a[1]=6就相当于那个意思.
LIS(a);
printf("Case %d:\n",t);
if(r != 1)
printf("My king, at most %d roads can be built.\n\n",r);//最后还有一个单复数问题.
else printf("My king, at most %d road can be built.\n\n",r);
}
}
//这里题目要特别注意了,会做LIS的,但是如何想到这个题目就是LIS很重要.
//这是需要在ACM的过程中培养的一种很重要的能力.举一反三...能够很快归类.
//如何将本题与LIS联系起来:
//若3->8,那么4-7的任何一个城市都不可以连接.即LIS中1,2,8,3,4,5,6,7...;若要8的话后面的比8小的都不可以.
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<math.h>
#include<string.h>
#include<algorithm>
const int inf = 0x3f3f3f;
using namespace std;
int r,c[500001],a[500001],n;
int dich(int x , int y)
{
int left = 1,right = y;
while(right >= left)
{
int mid = (right+left)/2;
if(x > c[mid])left = mid+1;
else right = mid-1;
}
r = max(r,left);
return left;
}
void LIS(int a[])
{
r = 1 ; c[1] = a[0];
for(int i = 1 ; i < n ; i++)
{
c[dich(a[i],r)] = a[i];
}
}
int main()
{
int t = 0 ;
while(scanf("%d",&n) != EOF)
{
t++;
memset(c,0,sizeof(c));
int mm,nn;
for(int i = 0 ; i < n ; i++)
{
scanf("%d%d",&mm,&nn);
a[mm-1] = nn-1;//还有这么一个思想.最开始的时候是想的是调用快排.为嘛会超时还不知道.
} //这样搞例如1->6 那么a[1]=6就相当于那个意思.
LIS(a);
printf("Case %d:\n",t);
if(r != 1)
printf("My king, at most %d roads can be built.\n\n",r);//最后还有一个单复数问题.
else printf("My king, at most %d road can be built.\n\n",r);
}
}