算法代码hdu 1025(最大上升子序列的n*logn解法)
近期朋友几篇文章介绍了改算法代码的文章. 关联文章的地址
之前遇到过这个算法,但是事先没有特别注意。
算法理解了七八分,但是还不敷彻底,先把代码发出来,明天修改一下,附上完全的算法思路。
#include<stdio.h>
#define N 500005
int a[N],ans[N];
int main()
{
int n;
int x,y;
int i;
int count;
count=1;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
a[x]=y;
}
ans[1]=a[1];
int ln;
ln=1;
for(i=2;i<=n;i++)
{
int low,up;
low=1;
up=ln;
while(low<=up)
{
int mid;
mid=(low+up)/2;
if(ans[mid]<a[i])
low=mid+1;
else
up=mid-1;
}
ans[low]=a[i];
if(low>ln)
ln++;
}
printf("Case %d:\n",count++);
if(ln==1)
printf("My king, at most 1 road can be built.\n");
else
printf("My king, at most %d roads can be built.\n",ln);
printf("\n");
}
return 0;
}
文章结束给大家分享下程序员的一些笑话语录: 自行车
一个程序员骑着一个很漂亮的自行车到了公司,另一个程序员看到了他,问 到,“你是从哪搞到的这么漂亮的车的?”
骑车的那个程序员说, “我刚从那边过来, 有一个漂亮的姑娘骑着这个车过来, 并停在我跟前,把衣服全脱了,然后对我说,‘你想要什么都可以’”。
另一个程序员马上说到, “你绝对做了一个正确的选择, 因为那姑娘的衣服你 并不一定穿得了”。

浙公网安备 33010602011771号