算法代码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; }
文章结束给大家分享下程序员的一些笑话语录: 自行车
一个程序员骑着一个很漂亮的自行车到了公司,另一个程序员看到了他,问 到,“你是从哪搞到的这么漂亮的车的?”
骑车的那个程序员说, “我刚从那边过来, 有一个漂亮的姑娘骑着这个车过来, 并停在我跟前,把衣服全脱了,然后对我说,‘你想要什么都可以’”。
另一个程序员马上说到, “你绝对做了一个正确的选择, 因为那姑娘的衣服你 并不一定穿得了”。