随笔分类 - 数据结构
摘要:這次比賽太水了,怎麼可以把A題過了,然後把D題小數據過了就可以進決賽?!(很顯然,我的修行還不夠,沒能進。。。)题目列表 > 无尽的编号时间限制: 1000ms 内存限制: 256MB描述在一条公路上,将要依次建造N座建筑。在每个建筑建成之后,都会用一个01串来给它编号。整条公路从起点到终点,所有建筑的编号都严格按照字典序递增的顺序来排列,而每在一个新的地方建起一个建筑时,它的编号会按以下规则确定:1) 编号要比前一个建筑(起点方向)的字典序大,比后一个建筑(终点方向)的字典序小3) 编号一定以1结尾2) 编号要尽可能短,满足该条件时,字典序尽可能小最开始时,公路的起点和终点上各有一个建
阅读全文
摘要:一维的差分数列如下定义:假设原数组为a[1]...a[n],a[0] = 0差分数列数组为d[1]...d[n]则d[i] = a[i]-a[i-1] (d数组初始化)題目: 給出原始數列a[1]...a[n] 給出m個操作方式: l r val 表示把a[l],...,a[r]都增加val 現在需要執行以下op條操作: x y 表示執行第x條操作方式到第y條操作方式 詢問:最終的數列a分析: 一:線段樹 顯然可以用線段樹成段更新。 1.對於每個操作,我們可以用樹狀數組、線段樹、差分數列,統計一下每條操作方式的次...
阅读全文
摘要:好久沒更新過了 T_T,恰好BZOJ到達了100題,寫下這篇水的題解。。。1047: [HAOI2007]理想的正方形Time Limit:10 SecMemory Limit:162 MBSubmit:860Solved:418[Submit][Status][Discuss]Description有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小。Input第一行为3个整数,分别表示a,b,n的值 第二行至第a+1行每行为b个非负整数,表示矩阵中相应位置上的数。每行相邻两数之间用一空格分隔。Output仅一个整数,为a*b矩阵中所
阅读全文
摘要:splay树对于区间操作比线段树更容易操作,编写代码也更容易,调试起来也很方便。以下我大概说说splay的几个操作以及我对几个题目的分析。首先是资料,请点击 here下载(如果不行的话,麻烦跟我说一下,谢谢)以下我们先定义几个数组和变量:// lx表示x的左儿子,rx表示x的右儿子,px表示x的父节点,root表示根节点,其他的类似#define lx ch[x][0]#define rx ch[x][1]#define px pre[x]#define ly ch[y][0]#define ry ch[y][1]#define py pre[y]#define lz ch[z][0]#def
阅读全文
摘要:题目here: 给出n个数,现在有m个区间询问l[i],r[i],问如何重新排列这n个数,使得 询问的和值最大分析: 方法一:差分数列 一维的差分数列如下定义: 假设原数组为a[1]...a[n],a[0] = 0 差分数列数组为d[1]...d[n] 则d[i] = a[i]-a[i-1] (d数组初始化) 我们发现:a[i] = sigma(d[i]) 所以我们对于区间[l,r]执行加同一个数的时候,我们可以执行 d[l] += val , d[r+1] -= val; 最终,我们可以用差分数列的累加和计算a[i]的值。#i...
阅读全文
摘要:F.A.QsWeb BoardHomeProblemSetStatusRanklistContestModifyUseryejinru(0)Logout捐赠本站Notice:祝大家新年快乐!1269: [AHOI2006]文本编辑器editorTime Limit:10 SecMemory Limit:162 MBSubmit:921Solved:320[Submit][Status][Discuss]Description这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器。你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义:文本:由0个或多
阅读全文
摘要:1588: [HNOI2002]营业额统计Time Limit:5 SecMemory Limit:162 MBSubmit:3863Solved:1199[Submit][Status][Discuss]Description营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的
阅读全文
摘要:HOJ 1016 Joseph's problem IMy Tags(Edit)Source:UnknownTime limit: 10 secMemory limit: 32 MSubmitted: 1484,Accepted: 439The Joseph's problem is notoriously known. For those who are not familiar with the problem, among n people numbered 1,2...n, standing in circle everymthis going to be execut
阅读全文
摘要:/* * 分析: * 如果是动态使用tarjan求联通分量求缩点个数的话,肯定TLE。 * 我们可以离线把所有要摧毁的星球输入,然后从把所有要摧毁的星球都摧毁之后往摧毁之前 * 建图,使用并查集的方式合并联通块。 * */#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int X = 400005;#define debug puts("here");int p[X];struct node{ int x,y,next;}edg
阅读全文
摘要:现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。 限制:L不超过当前数列的长度。 2、 插入操作。 语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。 限制:n是非负整数并且在长整范围内。 注意:初始时数列是空的,没有一个数。http://www.lydsy.com/JudgeOnline/problem.php?id=1012/* * 分析: * 单调队列加暴力。 * 这个程序优化的..
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=1029/* * 题目: * 每个任务需要ai时间完成,并且需要在时间bi或之前完成,问如何安排任务完成顺序,使得完成 * 任务的数量最多 * * 分析: * 贪心,先对期限排序,然后用最大堆维护需要完成的时间ai * 1.当now + ai <= bi时,ans + 1 ,更新now,把ai插入到堆中 * 2.当now + ai > bi时,若堆的最大元素大于ai时,将该元素(aj,bj)替换为ai,得到的序列答案 * 不会减少。因为替换之后,时间期限bi必定大于bj,所以可以完成该任
阅读全文
摘要:题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1819分析:暴力枚举需要添加、删除以及替换的字符,然后建立trie树进行判断是否存在该字符串,然后利用trie树存的信息进行判重时间貌似有点慢。329611yejinru1819Accepted21468kb1232msC++/Edit2193 B2012-12-16 17:34:39#include <cstdio>#include <iostream>#include <cstring>using namespace std;const int k
阅读全文
摘要:题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1821 给出n个野人的坐标,n个野人分别属于k个部落,现在问如何划分野人,使得每个部落之间的距离最小(部落之间的距离是部落中距离最近的两个野人的距离)分析: 对于所有的距离排序,然后利用并查集合并即可关键代码:(对于n==m时,特判。) for(int i=1;i<=tot;i++){ int x = edge[i].x; int y = edge[i].y; x = find_set(x); y = find_set(y); if(x!=y){ father[y] = x; n -.
阅读全文
摘要:题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1826分析: 贪心+堆或者平衡树(以下统一称为树)。越在后面,切换他是最好的。。。 1.当已经在树上的时候,换掉之前已在树上的该主存块,换成当前主存块的下一个出现的位置。 2.当前可用的cache足够的时候,直接插入到树中。 3.每次需要切换cache的时候,都切掉距离当前位置最远的那个主存块,然后将当前的cache的下一次出现的位置更新到树上。 先离散化,然后使用池子法从后往前扫,这样就可以统计每个主存块下一次出现的位置,插入的时候,直接插入的是当前主存块的下一个他出现的位置329452y
阅读全文
摘要:一个很水的版本 >_<直接vector操作,修改时直接lower_bound找到位置,然后add操作时是a.insert(),del操作时是a.erase(),询问时直接枚举求和。。。67782292012-09-16 21:57:16Accepted42886843MS1060K1154 BG++yejinruView Code 1 #include <iostream> 2 #include <vector> 3 #include <cstring> 4 #include <cstdio> 5 #include <algor
阅读全文
摘要:题目: 给出2*n个矩形(给出长和宽),问前n个矩形能够套上最多多少个后n个矩形分析: 把前n个矩形与后n个矩形分开在两数组中,然后分别先对长x(或宽)排序,排序结束后,只需要满足另外一个条件y就行。 在这里我们利用贪心的思想,每次从后n个矩形中满足x1>=x2且y2值尽可能最大,要维护y2值最大,我们可以使用平衡树(SBT、AVL、TREAP)或者Splay来维护都行,另外可利用STL的福利,直接调用multiset<int> s;维护即可,具体的应用请百度、谷歌,代码如下: 稍后我把SBT的弄上来View CodeSBT的如下:View Code 1 #include &
阅读全文
摘要:SBT的资料很多(陈启峰的论文以及下面的blog),在这里就不再叙述:给出下面几道题目以及代码:http://www.cnblogs.com/reflec94/archive/2011/01/22/1942095.htmlBZOJ 1208 [HNOI2002]营业额统计{Insert , pred , succ , find}View Code 1 /* 2 3 题目: 4 最小波动值= min { | 该天以前某一天的营业额-该天的营业额 | } 5 6 分析: 7 求前驱以及后继与当前的数相减的绝对值的最小值。 8 9 */ 10 #incl...
阅读全文
摘要:1208: [HNOI2004]宠物收养所Time Limit:10 SecMemory Limit:162 MBSubmit:1994Solved:689[Submit][Status][Discuss]Description最近,阿Q开了一间宠物收养所。收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物。 每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给每个处在收养所的宠物一个特点值。这样他就能够很方便的处理整个领养宠物的过程了,宠物收养所总是会有两种
阅读全文
摘要:1521. War Games 2Time Limit: 1.0 secondMemory Limit: 16 MBBackgroundDuring the latest war games (this story is fully described in the problem"War games") the Minister of Defense of the Soviet Federation comrade Ivanov had a good chance to make sure personally, that an alertness of the Sovi
阅读全文
摘要:/*题目: XML有缩进,并且会在之前的缩进基础上缩进几个空格,现在问缩进k个空格的标签分析: 模拟队列,及时更新空格即可*/#include <iostream>#include <cstdio>#include <cstring>#include <vector>using namespace std;const int X = 20005;int n,k;char s[105];char p[105];vector<int> vec[X];struct node{ char s[105]; int num;}q[X],ans[X
阅读全文