题解 \(by\;zj\varphi\) 观察这个序列,发现模数很小,所以它的循环节很小. 那么可以直接在循环节上做最长上升子序列,但是循环节中的逆序对会对拼接后的答案造成影响. 没有必要找逆序对个数,直接将循环节大小个拼接在一起即可. Code #include<bits/stdc++.h> #define ri register signed #define p(i) ++i namespace IO{ char buf[1<<21],*p1=buf,*p2=buf; #def…
改造二叉树 [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他又和他人讨论起了二叉搜索树. 什么是二叉搜索树呢?二叉搜索树首先是一棵二叉树.设key[p]表示结点p上的数值.对于其中的每个结点p,若其存在左孩子lch,则key[p]>key[lch]:若其存在右孩子rch,则key[p]<key[rch]:注意,本题中的二叉搜索树应满足对于所有结点,其左子树…
一定要保护自己的梦想,即使牺牲一切. 前言 把人给考没了... 看出来 T1 是一个周期性的东西了,先是打了一个暴力,想着打完 T2 T3 暴力就回来打.. 然后,就看着 T2 上头了,后来发现是看错题了,码完暴力就已经 2.5h 了 接下来就会开始看 T3 看到了部分分非常令人欣喜(码起主席树根本停不下来). 一直到考试结束都没想起我那 T1 . T1 最长不下降子序列 解题思路 对于比较小的数据可以直接 \(mathcal{O(nlogn)}\) 求出来(洗提 30 pts) 发现对于同一递…
题目链接:http://acm.swust.edu.cn/problem/585/ Time limit(ms): 3000 Memory limit(kb): 65535   SWUST国的一支科学考察队到达了举世闻名的古埃及金字塔. 关于金字塔的建造一直是一个未解之谜, 有着“西方史学之父”之称的希罗多德认为,金字塔的建造是人力和牲畜,花费20 年时间从西奈半岛挖掘天然的石头运送到埃及堆砌而成.也有不少人认为是外星人修建的.人们发现胡夫金字塔的经线把地球分成东.西两个半球,它们的陆地面积是相…
Description 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想所有第3批就餐的奶牛排在队尾,队伍的前端由设定为第1批就餐的奶牛占据,中间的位置就归第2批就餐的奶牛了.由于奶牛们不理解FJ的安排,晚饭前的排队成了一个大麻烦. 第i头奶牛有一张标明她用餐批次D_i(1 <= D_i <= 3)的卡片.虽然所有N(1 <= N <= 30,000)头奶牛排成了很整齐的队伍但谁都看得出来,卡片上的号码是完全杂乱无章的. 在若干次…
最长不下降子序列的nlogn算法 见 http://www.cnblogs.com/mengxm-lincf/archive/2011/07/12/2104745.html 这题是最长不上升子序列,倒过来当最长不下降子序列搞就行. 若是最长上升子序列,将upper_bound改成lower_bound即可. #include<cstdio> #include<algorithm> using namespace std; ,d[],b[],k=,t[],l[]; int* p; i…
网络流二十四题 网络流是个好东西,希望我也会. 网络流?\(orz\ zsy!!!!!\) P2766 最长不下降子序列问题 考虑我们是如何\(dp\)这个\(LIS\)的. 我们是倒着推,设置\(dp(i)\)代表以\(i\)为起点的\(LIS\)是多少.转移太显然了 \[ dp(i)=max\{dp(j)\}+1,data[i]\le data[j] \] 想一想一个合法的\(LIS\)方案代表着什么,代表着它是由这个式子一个一个推出来的. 考虑一个数字只能用一次,那么我们直接拆成两个点\(…
最长不下降子序列实现: 利用序列的单调性. 对于任意一个单调序列,如 1 2 3 4 5(是单增的),若这时向序列尾部增添一个数 x,我们只会在意 x 和 5 的大小,若 x>5,增添成功,反之则失败.由于普通代码是从头开始比较,而 x 和 1,2,3,4 的大小比较是没有用处的,这种操作只会造成时间的浪费,所以效率极低.对于单调序列,只需要记录每个序列的最后一个数,每增添一个数 x,直接比较 x 和末尾数的大小.只有最后一个数才是有用的,它表示该序列的最大限度值. 实现方法就是新开一个数组 d…
P2766 最长不下降子序列问题 考虑我们是如何\(dp\)这个\(LIS\)的. 我们是倒着推,设置\(dp(i)\)代表以\(i\)为起点的\(LIS\)是多少.转移太显然了 \[ dp(i)=max\{dp(j)\}+1,data[i]\le data[j] \] 想一想一个合法的\(LIS\)方案代表着什么,代表着它是由这个式子一个一个推出来的. 考虑一个数字只能用一次,那么我们直接拆成两个点\(v_0,v_1\)分别代表一个数字的入度和出度,连一条\(v_1v_2,cap=1\)的边.…
分析: 完整 代码: // 最长不下降子序列 #include <stdio.h> #include <algorithm> using namespace std; ; int A[N], dp[N]; int main() { freopen("in.txt", "r", stdin); int n; scanf("%d", &n); ; i <= n; i++){ scanf("%d"…