//
// main.cpp
// Richard
//
// Created by 邵金杰 on 16/9/16.
// Copyright © 2016年 邵金杰. All rights reserved.
//
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=500000+100;
int p[maxn],r[maxn],a[maxn],d[maxn];
int Binarysearch(int key,int low,int high)
{
int mid;
while(low<=high)
{
mid=(low+high)>>1;
if(key>d[mid]&&key<=d[mid+1])
return mid;
else if(key>d[mid])
low=mid+1;
else
high=mid-1;
}
return 0;
}
int LIS(int p)
{
d[1]=a[1];
int len=1;
int j;
for(int i=2;i<=p;i++)
{
if(a[i]>d[len])
j=++len;
else
j=Binarysearch(a[i],1,len)+1;
d[j]=a[i];
}
return len;
}
int main()
{
int n,kase=0;
while(scanf("%d",&n)!=EOF)
{
memset(d,0,sizeof(d));
memset(a,0,sizeof(a));
int len=1;
for(int i=1;i<=n;i++) {scanf("%d%d",&p[i],&r[i]);a[p[i]]=r[i];}
len=LIS(n);
printf("Case %d:\n",++kase);
if(len==1) printf("My king, at most %d road can be built.\n\n",len);
else printf("My king, at most %d roads can be built.\n\n",len);
}
return 0;
}
HDU 1025 Constructing Roads In JGShining's Kingdom(LIS)
最新推荐文章于 2019-04-15 19:09:10 发布