
ACM/ICPC_数据结构
just_sort
Acdream.
展开
-
HDU 4007 Dave (线段树扫描线 或 暴力+双扫描线)
【题意】给了n个点,求一个正方形能围住的最大点数,同样正方形平行于坐标轴。【解题方法1】线段树+扫描线。AC时间:30ms。////Created by just_sort 2016/12/3//Copyright (c) 2016 just_sort.All Rights Reserved//#include #include #include #include #原创 2016-12-04 19:53:56 · 778 阅读 · 0 评论 -
POJ 3074 DLX精确覆盖求解数独问题
【解题方法】 DLX解决9*9的数独问题,转化为729*324的精确覆盖问题 行: 一共9 * 9 * 9 == 729行。一共9 * 9小格,每一格有9种可能性(1 - 9),每一种可能都对应着一行。 列: 一共(9 + 9 + 9)原创 2016-08-19 11:27:22 · 1467 阅读 · 0 评论 -
SPOJ 3273 Treap
【题意】给定n个操作,I,D,K,C,分别代表插入,删除,找第K大元素,找小于x的元素个数。【解题方法】基本的Treap操作了,考虑如果一个数没在Treap里面,那么先插入Treap然后查排名,然后删除这个数。【AC 代码】#include #include #include #include using namespace std;struct Treap{原创 2016-08-08 11:34:36 · 289 阅读 · 0 评论 -
POJ 1442 (Treap 板子记录)
【题意】给一个序列,然后给出m个查询,每次查询输入一个数x,对于第i次查询,输出前x个数中第i大的关键字的值。【解题方法】就是裸Treap板子了,先介绍一下Treap。Treap是一棵二叉搜索树,只是每个节点多了一个优先级fix,对于每个节点,该节点的优先级小于等于其所有孩子的优先级。当然,引入优先级fix的目的就是防止BST退化成一条链,从而影响查找效率。 所以,这样原创 2016-08-08 11:14:32 · 797 阅读 · 0 评论 -
Codeforces483D 线段树上的位操作
【题目】点击打开链接【题意】给出若干个条件,让一个序列满足从第Li个数到第Ri个数的&和为Qi;问是否存在这个序列,若存在,输出YES,并输出这个序列,否则输出NO.思路:线段树区间覆盖,对于每一个条件,对这个区间上的每一个数都|上询问的数。操作完之后,在检查每个询问是否成立。【AC 代码】#include #include #include #include #i原创 2016-08-07 19:52:57 · 604 阅读 · 3 评论 -
HDU.5592 ZYB's Premutation(线段树求第k大)
【题意】给定【1,i】前缀逆序对数,还原原序列。【解题方法】先把前缀和还原成原来的,考虑倒着来,每个就相当于前面有多少个比自己大,线段树求第k大就好了,BIT什么的也可以【AC 代码】#include #include #include #include using namespace std;const int maxn=50010;int n,a[maxn];int原创 2016-08-07 19:18:09 · 686 阅读 · 4 评论 -
HDU.4605 Magic Ball Game
【题意】 多校的一个题目。 根为1的N 每碰到一个球,有3种情况: 1:如果此球重量等于该节点重量或者没有儿子节点了,球就停下了 2:如果此球重量小于该节点重量,则分别往左右儿子走的可能都是1/2 3:如果此球重量大于该节点重量,则走向左儿子的概率是1/8,原创 2016-08-07 11:03:02 · 891 阅读 · 0 评论 -
FZU 1686 神龙的难题(DLX 重复覆盖)
【题意】Description这是个剑与魔法的世界.英雄和魔物同在,动荡和安定并存.但总的来说,库尔特王国是个安宁的国家,人民安居乐业,魔物也比较少.但是.总有一些魔物不时会进入城市附近,干扰人民的生活.就要有一些人出来守护居民们不被魔物侵害.魔法使艾米莉就是这样的一个人.她骑着她的坐骑,神龙米格拉一起消灭干扰人类生存的魔物,维护王国的安定.艾米莉希望能够在损伤最小的前原创 2016-08-18 10:16:31 · 541 阅读 · 0 评论 -
HDU 2295 Radar(二分加DLX)
【题意】 有n个城市,m个雷达,k个操作员,要求确定最小的半径,使得所有城市都能被覆盖。首先,解空间应该是一组数,也就是任意一个雷达和城市的距离的集合,答案必然是其中的一个,所以排好序,二分查找。每次判断某个半径能不能做到覆盖就可以了。至于覆盖问题,马上想到Dancingl ink 。【解题方法】 联想完美覆盖模型,每个城市代表一列,每个雷达代表一行,如果雷达原创 2016-08-18 09:25:20 · 670 阅读 · 0 评论 -
Educational Codeforces Round 6 E. New Year Tree
【题意】给定N=4*1e5个节点的树,有Q=4*1e5个操作,每次可以选择一个节点,把他的儿子结点全部染成一种颜色,还有就是查询某个节点最后有多少个颜色。【解题方法】其实这题应该算是区间染色加DFS的板子题了。我用的是bitset压位来解决了区间染色问题。具体看代码吧。【AC代码】#include #include #include #include #include u原创 2016-08-06 10:07:40 · 262 阅读 · 0 评论 -
BZOJ 3262 陌上花开
3262: 陌上花开Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1393 Solved: 626[Submit][Status][Discuss]Description有n朵花,每朵花有三个属性:花形(s)、颜色(c)、气味(m),又三个整数表示。现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量。定义一朵原创 2016-08-05 21:39:58 · 476 阅读 · 0 评论 -
51 nod 1376 最长递增子序列的数量(二维偏序cdq)
【题意】求一个序列中LCS的数量?【解题方法1】f[i]:以第i个数结尾的LCS的长度,和该长度的LIS的数量,转移的话,显然f[i].first=max(f[j].first)+1,j【AC代码】//51nod//LCS CDQ/BIT#include #include #include #include #include using namespace std;co原创 2016-08-05 18:28:05 · 1273 阅读 · 0 评论 -
Codeforces Round #365 (Div. 2) C. Chris and Road(计算几何+二分)
【解题方法】比较显然的是有两种情况,一种是车还在x轴另一边的时候人就已经走过去了,一种是车完全过去了的时候人走到,那么第一种情况直接先判一下,第二种情况二分时间然后同样算一下就可以了。【AC 代码】#include using namespace std;const double eps=1e-9;const int maxn=10050;int judge(double x){原创 2016-08-05 14:28:51 · 454 阅读 · 0 评论 -
Codeforces Round #123 (Div. 2) B - After Training
【题意】有n个球和m个篮子,将球依次放进篮子里,优先放到球最少的篮子里,如果有多个这样的,则放到这样的篮子中,放到值最小的那个篮子中。问每个球分别放到了哪个篮子中。【解题方法】特别注意的一个细节,是一个实数,如果存到一个int里面,会造成错误的结果。这道题用线段树维护整个区间的最小值和最小值所在的位置。进行pushup的时候,如果左子树的最小值和右子树的最小值相等,就要将这个节点的最小原创 2016-08-02 10:53:22 · 528 阅读 · 0 评论 -
HDU 4893 Wow! Such Sequence!
【题意】1 把第K个点加上D;2 把区间[l,r]里的数变为离它最近的斐波那契数(这个fib数最小,且这个fib减这个数的绝对值也最小)3 询问[l,r]区间内的和【解题方法】维护两个sum。sum1存放当前区间的和,sum2存放当前区间所有数变成fib之后的和。这样,进行覆盖的时候,被覆盖的区间直接sum1=sum2就行了。【AC 代码】#includ原创 2016-08-02 09:24:24 · 304 阅读 · 0 评论 -
Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum
【题意】给了一个序列,询问[L,R]区间里面出现次数为偶数次的数的异或和。【解题方法】仔细想了一下,就是区间所有的数的异或和再异或上L,R区间里面不同的数的异或和(这个东西用离线线段树轻松搞定)。【AC代码】#include #include #include #include #include using namespace std;#define ll long lon原创 2016-08-05 13:22:16 · 382 阅读 · 0 评论 -
UVA 11732 "strcmp()" Anyone?
【题意】给出strcmp的比较原理,计算要比较所有的字符串需要比较的最少次数。【解题方法】下面是对that和than这两个单词的比较。代码中出现了两处比较,因此than和that的比较过程是这样的:第一步,s[0]和t[0]比较,相同,然后s[0]!=’\0’,又是一次比较,此步共2次;第二步,s[1]和t[1]比较,相同,然后s[1]!=’\0’,又是一次比较,此原创 2016-08-01 18:50:31 · 339 阅读 · 0 评论 -
ACdream OJ 1063 平衡树
【题意】点击打开链接【解题方法】水题,字典树XOR搞一搞就好了。【AC 代码】#include #include #include #include using namespace std;const int maxn=1e6+2;struct node{ int ch[maxn][2]; int root,L; int newnode(){原创 2016-08-04 20:01:58 · 511 阅读 · 0 评论 -
BZOJ 3809 Gty的二逼妹子序列
【题意】莫队加树状数组的做法很显然,解法借鉴HZWER大牛,这道题可以这样做,考虑对权值分块,这样使得每次查询复杂度变为√n,而修改的复杂度变为O1总复杂度降为m√n,其实我自己一直没怎么想懂这个问题,感觉这个复杂度确实没优化多少。【AC 代码】#include #include #include #include #include using namespace std;原创 2016-08-08 15:58:11 · 491 阅读 · 0 评论 -
SWUST 2268 SB_cyh and his BST two (Treap名次树)
Input 多组数据(整个文件以输入 -1 结束)对于每组数据,有若干行(最多100000行),表示的意义如下:【A】 insert x 【B】 delete x【C】 predecessor x【D】 successor x【E】 Kth x【F】 rank x这6种操作的意义与上面的定义相对应!【G】 print 表示从小到大输出序列中的所有元素【H】 en原创 2016-08-08 16:27:50 · 826 阅读 · 0 评论 -
2013 Multi-University Training Contest 4 Group(离线+BIT)
GroupTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2203 Accepted Submission(s): 1147Problem DescriptionThere are n men ,every m原创 2016-09-16 15:51:51 · 574 阅读 · 0 评论 -
2016 ACM/ICPC Asia Regional Shenyang Online HDU 5893 List wants to travel
List wants to travelTime Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 331 Accepted Submission(s): 66Problem DescriptionA boy name原创 2016-09-19 18:42:22 · 602 阅读 · 0 评论 -
HUST 1017 Exact cover(舞蹈链 入门题)(模板记录)
【题意】不解释了,就是裸的DLX模板题,先记录一下DLX的板子,看了半天总算理解了一些。【DLX学习】参考这篇博客:点击打开链接 写得非常清楚,顺便赞一句,DLX真的是太神奇了。orz。【AC 代码 DLX 模板】/********************///Created by just_sort 2016/8/13//All Rights Reserved.//Dancin原创 2016-08-14 09:43:54 · 960 阅读 · 0 评论 -
HDU 5493 Queue (线段树)2015合肥赛区网络赛
【参考BLOG】 点击打开链接【题意】给定N<105个人的序列,N个(height,k)二元组描述这个序列height:=这个人的身高,k:=这个人的左边或者右边有k个人比他高构造一个字典序最小的序列满足这些条件【解题方法】从高到低放或者从低到高放都可以,由于本题要输出字典序最小的序列,所以我们使用从低到高放由于从低到高放,之后放进去的是都是比当前高的考虑当前当前放原创 2016-08-13 14:58:35 · 561 阅读 · 0 评论 -
HDU 4614 二分加线段树
【题意】初始有n个空花瓶,然后有q个操作,1 x y,从x开始插花,插够k个即可。2 x y,把x,y区间有有花的花瓶全部清空。【解题方法】线段树维护剩余空花瓶的个数 第一种操作二分≥1的最左边的位置,二分≥k的最左边位置 第二种直接更新就好啦 复杂度是O(n+mlog2n)【AC代码】#include #include #include原创 2016-08-13 14:13:10 · 525 阅读 · 0 评论 -
HDU 5634 Rikka with Phi
【题意】有一个序列,有3种操作,一种是把区间里面所有的数变成他的欧拉函数值,第二种是把整个区间的数变成某一个值,第三种是查询区间的和。【解题方法】这道题其实用线段树来维护就完全可以了,只有当区间的setv存在时,我们更新下去。具体细节见代码。【AC 代码】#include #include #include #include using namespace std;t原创 2016-08-13 09:37:40 · 305 阅读 · 0 评论 -
UVA 11297 Census(2D线段树解决子矩阵的最大最小)
【题意】给了一个n*n的矩阵,有两种操作,一种是更新矩形里面某个点的值,一种是查询一个子矩阵的最大和最小值。【解题方法】2D线段树裸题了。直接上代码了。////Created by just_sort 2016/9/16 14:25//Copyright (c) 2016 just_sort.All Rights Reserved////2D segment tree.#inc原创 2016-09-16 17:00:12 · 719 阅读 · 0 评论 -
UVA 11997 K Smallest Sums(多路归并求前k个最小和的值)
【题意】有k个整数数组,包含k个元素。在每个数组中取一个元素加起来,可以得到k^k个和。求这些和中最小的k个值(重复的值算多次)。【解题方法】具体参见大白书P189.【AC 代码】////Created by just_sort 2016/9/16 11:08//Copyright (c) 2016 just_sort.All Rights Reserved//#includ原创 2016-09-16 14:20:24 · 598 阅读 · 0 评论 -
POJ 2763 Housewife Wind 两种解法
Housewife WindTime Limit: 4000MS Memory Limit: 65536KTotal Submissions: 9637 Accepted: 2642DescriptionAfter their royal wedding, Jiajia and Wind hid away in XX Vi原创 2016-09-04 15:27:58 · 813 阅读 · 0 评论 -
多校联合训练8&&HDU 5828
【题意】给了一个序列,3个操作,1是给区间[l,r]加上一个数,2是给区间[l,r]里每个数开平方,3是查询[l,r]的和。【解题方法】其实这道题线段树就完全可以维护了,平衡树不会,线段树节点里面保存了两个标记,一个是add(区间加),一个是区间里面元素是否相同,接下来很重要的主要是pushdown的写法了,这里一定要先考虑issame标记,然后考虑add,这个顺序一定不能反。具体细节原创 2016-08-11 21:31:03 · 730 阅读 · 0 评论 -
HDU5497 (梳状数组套two pointers)
【题意】N=105的序列,求删去一个MN的连续子序列后,剩余序列的最小逆序对数【解题方法】求逆序对当然要BIT辣,然后维护删去固定大小的序列可以用two pointers 开两个BIT,b[]维护连续M子序列前面的,c[]维护后面的 删去ai+m,影响就是少了后面所有比它小的逆序对数,以及前面所有比它大的逆序对数 添加ai,同理,多了所有比它小的逆序对数,以及前面所有比原创 2016-08-11 10:09:53 · 635 阅读 · 0 评论 -
Codeforces Round #223 (Div. 2) E Sereja and Brackets
【题意】给一个括号字符串,然后m个查询,查询【L,R】区间里最大的括号匹配数。【解题方法】虽然是E题,但我不得不说这是个很水的题。我们只需要考虑一下每个区间没匹配左括号的个数,没匹配的右括号的个数,以及匹配的括号数即可。接下来就是区间合并的典型套路了。【AC 代码】#include #include #include #include using namespace std;原创 2016-08-10 19:49:04 · 301 阅读 · 0 评论 -
2016 ICPC 大连网络赛 HDU 5877 Weak Pair
Weak PairTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1445 Accepted Submission(s): 468Problem DescriptionYou are given a roo原创 2016-09-12 20:01:15 · 784 阅读 · 2 评论 -
Manthan, Codefest 16 C. Spy Syndrome 2(Trie树套DP)
【题意】给你m个单词的词典和一句话,这句话中的每个单词都来自字典,字典中的每一个单词重复可用,把这句话所有大写字母变成小写字母,然后反转单词去掉空格,要求你恢复这句话。【解题方法】Trie+dp.dp[i]=:以i结尾的字符串是否可以解密,为记录答案直接存长度就可以了。复杂度O(n*1000)【AC 代码】//zxy#include using namespace std;原创 2016-08-10 09:40:15 · 382 阅读 · 0 评论 -
BZOJ 4653: [Noi2016]区间
Description在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn]。现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置。换句话说,就是使得存在一个 x,使得对于每一个被选中的区间 [li,ri],都有 li≤x≤ri。对于一个合法的选取方案,它的花费为被选中的最长区间长度减去被选中的最短区间长度。区间 [li,ri] 的长度定义为 ri−原创 2016-08-19 20:39:14 · 1126 阅读 · 0 评论 -
Codeforces Round #316 (Div. 2) D. Tree Requests
D. Tree Requeststime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputRoman planted a tree consisting of n vertices. Each原创 2016-09-10 11:25:42 · 456 阅读 · 0 评论 -
HDU 5172 GTY's gay friends(HASH 随机算法)
【题意】给出一个长度为n的数组(n【解题方法】一个区间是排列只需要区间和为\frac{len(len+1)}{2}2len(len+1)(lenlen为区间长度),且互不相同,对于第一个问题我们用前缀和解决,对于第二个问题,预处理每个数的上次出现位置,记它为pre,互不相同即区间中pre的最大值小于左端点,使用线段树或Sparse Table即可在O(n)/O(nlogn)O(n原创 2016-08-08 17:09:57 · 627 阅读 · 0 评论 -
BZOJ 2038 小Z的袜子
【题意】中问题面。【解题思路】对于L,R的询问。设其中颜色为x,y,z....的袜子的个数为a,b,c。。。那么答案即为(a*(a-1)/2+b*(b-1)/2+c*(c-1)/2....)/((R-L+1)*(R-L)/2)化简得:(a^2+b^2+c^2+...x^2-(a+b+c+d+.....))/((R-L+1)*(R-L))即:(a^2+b^2+c^2+...x^2-(R-L+1)原创 2016-08-04 18:55:35 · 329 阅读 · 0 评论 -
UVA 1401 Remember the Word
【题意】给出一个有S个不同单词组成的字典和一个字符串。把这个字符串分解成若干个单词的连接,有多少种方法?【解题方法】令dp[i]表示以字符i结束的字符串的分解方案数,即dp[i+j] = sum(dp[i]) (j为一个单词的长度),初始化dp[0] = 1;把所有单词组成Trie,然后试着在Trie中查找单词即可。【AC代码】//File Name: Trie Tree.//C原创 2016-08-01 14:54:13 · 338 阅读 · 0 评论 -
HDU 3397 Sequence operation
【题意】操作区间上只有0和1,操作有两个,第一个是区间染色,第二个是区间反转(01变换).询问也用两个,一个是询问区间内1个个数,二是询问区间内最长的连续的1的个数。【解题方法】典型的线段树区间合并。难点是有2种区间操作,处理好这两种操作的关系,这道题也就没有难点了。我们观察可以发现,覆盖的优先级高于反转。无论这个区间怎样反转,只要来一次覆盖,所有的反转都将会失效。所以,在pushdown的时原创 2016-08-04 15:31:36 · 392 阅读 · 0 评论