【最长递增子序列O(nlgn)算法】HDU 1025_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 【最长递增子序列O(nlgn)算法】HDU 1025

【最长递增子序列O(nlgn)算法】HDU 1025

 2011/9/16 8:11:47  基德KID.1412  http://972169909-qq-com.iteye.com  我要评论(0)
  • 摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1025很难说清楚,自己模拟几下就会慢慢明白,模板题求的是最长递增子序列的长度#include<iostream>#include<fstream>#include<algorithm>#include<string>#include<set>//#include<map>#include<queue>#include<
  • 标签:算法
http://acm.hdu.edu.cn/showproblem.php?pid=1025

很难说清楚,自己模拟几下就会慢慢明白,模板题
求的是最长递增子序列的长度


#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
#include <set>
//#include <map>
#include <queue>
#include <utility>
#include <iomanip>
#include <stack>
#include <list>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
//#include <ctime>
#include <ctype.h>
using namespace std;
#define LL __int64
#define inf 0x3fffffff
#define M 500005

int v[M];

int main()
{
	int n, i, tv, x, cc = 1, top;
	while (~scanf ("%d", &n))
	{
		memset (v, 0, sizeof(v));
		for (i = 0; i < n; i++)
		{
			scanf ("%d%d", &x, &tv);
			v[x-1] = tv;
		}
	/********************模板********************/
		top = 0;
		for (i = 0; i < n; i++)
		{
			int *p = lower_bound (v, v+top, v[i]);
			if (p - v == top)
				++top;
			*p = v[i];
		}
	/********************模板********************/
		printf ("Case %d:\n", cc++);
		if (top <= 1)
			printf ("My king, at most %d road can be built.\n\n", top);
		else
			printf ("My king, at most %d roads can be built.\n\n", top);
	}
    return 0;
}
发表评论
用户名: 匿名