随笔分类 - ACM--数据结构
摘要:1 // 两个队列+k叉哈夫曼树 HDU 5884 2 // camp题解: 3 // 题意:nn个有序序列的归并排序.每次可以选择不超过kk个序列进行合并,合并代价为这些序列的长度和.总的合并代价不能超过TT, 问kk最小是多少。 4 // . 5 // 题解:首先二分一下这个kk。然后在给定kk的情况下,这个代价其实就是kk叉的哈夫曼树问题。因此直接套用哈夫曼树的堆做法即可。复杂度...
阅读全文
摘要:A - Pineapple Incident 1 #pragma comment(linker, "/STACK:102c000000,102c000000") 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #inc
阅读全文
摘要:lazy标记
阅读全文
摘要:划分树:查询区间第K大 还有另外一种模板,记录比当前元素还小的元素和。
阅读全文
摘要:题意:做蛋糕,给出N个半径,和高的圆柱,要求后面的体积比前面大的可以堆在前一个的上面,求最大的体积和。 思路:首先离散化蛋糕体积,以蛋糕数量建树建树,每个节点维护最大值,也就是假如节点i放在最上层情况下的体积最大值dp[i]。每次查询比蛋糕i小且最大体积的蛋糕,然后更新线段树。注意此题查询的技巧!!
阅读全文
摘要:题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报思路:直接搞超时+超内存,需要离散化。离散化简单的来说就是只取我们需要的值来 用,比如说区间[1000,2000],[1990,2012] 我们用不到[-∞,999][1001,1989][1991,1999][2001,2011][201
阅读全文
摘要:1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cstdio> 6 #include<set> 7 #include<map> 8 #include<vector
阅读全文
摘要:1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cstdio> 6 #include<set> 7 #include<map> 8 #include<vector
阅读全文
摘要:水 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cstdio> 6 #include<set> 7 #include<map> 8 #include<vect
阅读全文
摘要:题意:求q次询问的静态区间连续最大和起始位置和终止位置 输出字典序最小的解. 思路:刘汝佳白书 每个节点维护三个值 pre, sub, suf 最大的前缀和, 连续和, 后缀和 然后这个题还要记录解的位置所以还要区间总和sum 1 #include<iostream> 2 #include<stri
阅读全文
摘要:题意:一条大街上住着n个乒乓球爱好者,经常组织比赛切磋技术。每个人都有一个能力值a[i]。每场比赛需要三个人:两名选手,一名裁判。他们有个奇怪的约定,裁判必须住在两名选手之间,而裁判的能力值也必须在两名选手之间。问一共能组织多少种比赛。分析:考虑第i个人,假设a1到ai-1中有ci个比ai小,那么就
阅读全文
摘要:题意:K个数组每组K个值,每次从一组中选一个,共K^k种,问前K个小的。思路:优先队列处理多路归并,每个状态含有K个元素。详见刘汝佳算法指南。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8...
阅读全文
摘要:用优先队列维护每个时间点优先级最高的元素。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 int n,m;10 11 struct Item1...
阅读全文
摘要:水题 学习一下数据的存储方法。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 int n,m;10 map >a;11 12 int main...
阅读全文
摘要:题意:给你n个操做,判断是那种数据结构。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int n; 8 int v[1010],u[1010]; 9 10 int ck_q()11 {...
阅读全文
摘要:题意:给你个点m条边的无向图,每个节点都有一个整数权值。你的任务是执行一系列操作。操作分为3种。。。思路:本题一点要逆向来做,正向每次如果删边,复杂度太高。逆向到一定顺序的时候添加一条边更容易。详见算法指南P235。 1 #include 2 3 struct Node 4 { 5 ...
阅读全文
摘要:题意:给你n个人,有两个属性x、y,如果不存在另外一个人x2,y2满足 x2 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 struct Point 9 {10 int a,b;11 b...
阅读全文
摘要:题意:给你一个串,问期中至少出现m次的最长子串及其起始位置的坐标。思路:hash+LCP+二分答案 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int maxn = 40000 + 10; 7 const in...
阅读全文
摘要:题意:给你N个串,求一个串在大于等于N/2的模板串中连续出现。如果有多解按字典序最小输出。白书模板题。二分答案+合并模板串成一个新串,扫秒新串的height数组。考查后缀数组+LCP 1 #include 2 #include 3 #include 4 using namespace std...
阅读全文
摘要:题意:给出一个n*m的字符矩阵T,你的任务是找出给定的x*y的字符矩阵P在T中出现了多少次.思路:要想整个矩阵匹配,至少各行都得匹配。所以先把P的每行看做一个模式串构造出AC自动机,然后在T中的各行逐一匹配,找到P中每一行的所有匹配点。只要在匹配时做一些附加操作,就可以把匹配出来的单一的行拼成矩形。...
阅读全文