摘要: 从后向前对已搜点做两遍LIS(最长不下降子序列),分别求出已搜点的最长递增、递减子序列长度。这样一直搜到第一个点,就得到了整个序列的最长递增、递减子序列的长度,即最长递减子序列在前,最长递增子序列在后,得到题目所求的双端队列的最长不下降子序列。注意要去重,当发生替换之后,同种元素在两个序列中的数量不同。为得到最长序列,当然是把少的去掉,留下多的。52 1 2 2 3 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int MAXN=111111; 8 9 vectorv1;10 vec.. 阅读全文
posted @ 2013-07-28 14:03 Thousand Sunny 阅读(513) 评论(0) 推荐(0) 编辑
摘要: 求树上最长链:两遍搜索。第一次从树上任意点开始,最远点必然是某一条最长链上的端点u。第二次从u开始,最远点即该最长链的另一端点。先在最长链上走,不足再去走支链。把询问数m错打成n,狠狠wa了一次= = 1 #include 2 #include 3 4 const int MAXN=111111; 5 6 struct E{ 7 int v,next; 8 }e[MAXN=w)78 printf("%d\n",w-1);79 else80 printf("%d\n",(q[n-1].c-1)+(... 阅读全文
posted @ 2013-07-28 10:34 Thousand Sunny 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 比较裸的FFT(快速傅里叶变换),也是为了这道题而去学的,厚的白书上有简单提到,不过还是推荐看算法导论,讲的很详细。代码的话是照着别人敲的,推荐:http://www.cnblogs.com/kuangbin/archive/2013/07/24/3210565.html写的很详细。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define LL __int64 7 8 const double PI=acos(-1.0); 9 10 struct complex{ /... 阅读全文
posted @ 2013-07-28 09:25 Thousand Sunny 阅读(269) 评论(0) 推荐(0) 编辑