
数据结构
文章平均质量分 71
squee_spoon
这个作者很懒,什么都没留下…
展开
-
Codeforces problem 750E New Year and Old Subsequence
New Year and Old Subsequence 我们的目标是得到含有’2017’而不含有’2016’的子序列,有多次查询,用线段树解决。在线段树的每个节点中,开一个5*5的二维数组arr[i][j],表示该区间为了能够出现’2017’中的[i,j)子序列而不会出现[i,j]子序列,并且不会出现’2016’,需要删除的最少字符数。 比如arr[0][2]表示该区间能够出现’20’但原创 2017-03-24 11:34:58 · 450 阅读 · 0 评论 -
poj 2823 Sliding Window
题意:n个数,求每连续k个数中的最大最小值。 思路:单调队列模板题。。以最大数为例,开一个队列,每个数按顺序入队,需要保证队列单调递减,如果入队时前面比当前的数大,就让前面的出队。如果队首到队尾的元素位置差超过k,就让队首出队。 为什么可以这样做呢,因为“窗口”的大小是k,晚来的一定晚走,如果晚来的比先来的大,那么先来的就没有存在的意义了;如果晚来的比先来的小,原创 2015-01-04 14:09:11 · 461 阅读 · 0 评论 -
poj 2481 Cows
题意:给出n个区间,对每个区间求有多少个区间包含它且比它大。 思路:树状数组。对区间左端点升序排序,右端点降序排序。扫一遍,查询之前有多少右端点大于等于当前右端点,把当前右端点加入BIT。处理的时候右端点需要+1,遇到相同区间直接复制答案,更新BIT。#include #include #include #include #include #include原创 2014-12-28 18:10:48 · 453 阅读 · 0 评论 -
Codeforces Round #285 (Div. 1) B
B. Misha and Permutations Summation 题意:有两个0~n-1的排列p和q,设p是第x小的排列,q是第y小的排列,求0~n-1的全排列中第(x+y)mod(n!)小的排列。 思路:很容易想到康托展开。。但是n太大了,无法真正康托展开。所以用树状数组统计p和q中每个数后面有多少个比它小的数,然后求和,进位(最后一位满1进原创 2015-01-14 16:53:24 · 627 阅读 · 0 评论 -
Codeforces Round #283 (Div. 2) E
E. Distributing Parts 题意:一个节目,有n个部分,每部分有一个范围;有m个人,每个人有个能力范围,能表演若干部分。如果人的范围包含了某个部分的范围,就能表演那个部分,问如何分配。 思路:贪心+平衡二叉树(set)上查找。将每个部分和人按范围的下界排序,然后对每个部分,把下界满足表演要求的人加到集合里去维护,然后贪心找一个上界尽量原创 2014-12-22 17:29:11 · 937 阅读 · 0 评论 -
poj 2155 Matrix
题意:一个n*n的01矩阵,初始全0,有两种操作,一是将一个矩形区间取反,二是查询某个元素的值,对每个查询输出0或1。 思路:二维线段树。这是我的第一道二维线段树,之前一直不理解,今晚狠下心仔细看终于顿悟了。二维线段树有两类节点,对于这道题,可以把每一(多)列视为用一棵线段树维护,维护的是区间被取反了多少次;X轴方向上,也用一棵线段树维护,维护的是区间内的列。查询的时候,边查询边原创 2014-12-05 01:23:39 · 513 阅读 · 0 评论 -
poj 1195 Mobile phones
题意:一个s*s的矩阵,初始都是0,有若干次操作,要么增加某个元素的值,要么查询某个范围的和。 思路:二维树状数组模板题。。#include #include #include #include #include #include #include #include using namespace std; #defin原创 2014-12-04 18:57:41 · 510 阅读 · 0 评论 -
hdu 5046 Airport
题意:n个城市,建k个飞机场。你需要使离飞机场最远的城市距离飞机场最近。距离的定义是横坐标的差+纵坐标的差。 思路:二分距离,DLX判断能否满足要求。直接上的模板。。貌似c++的abs()函数返回类型是int,坑了我好多发。。#include#include#include#include#include#include#include#include原创 2014-12-02 21:36:06 · 574 阅读 · 0 评论 -
hdu 3966 Aragorn's Story
题意:原创 2014-11-24 23:36:22 · 636 阅读 · 1 评论 -
poj 3740 Easy Finding
题意:给一个01矩阵,问是否能找到一个行的集合,使得集合中每列出现且仅出现一次‘1’。 思路:舞蹈链X算法模版题。来谈谈我对这个算法的理解。。这个算法是一个深搜,但是它的数据结构非常巧妙,是一个循环十字链表,把矩阵内为1的元素建立节点,都链起来,还加上了一个“表头”。每次先选一列没找到‘1’的列,如果没有,则寻找失败;如果有,选择一行,把这行,这行有‘1’的列,与这行有公共列出现原创 2014-12-01 06:26:17 · 546 阅读 · 0 评论 -
hdu 5044 Tree
题意:一棵树。有两种操作,对两个点uv路径上的所有点加权和对路径上的所有边加权。最后输出所有点的权和所有边的权。 思路:树链剖分+树状数组。感觉这个题出出来就是为了报复社会的,我一共跪了25次。。又是扩栈又是输入挂又是内联,最后只有用c++交能过,g++爆栈。不过话说回来这个题也挺模版的,都是树链剖分的基本操作。因为没学过对边的处理,我把边绑在点上了,更改查询边时,去操作边向远离原创 2014-11-29 10:41:14 · 623 阅读 · 0 评论 -
Boring String Problem
题意:给一个字符串,在里面原创 2014-11-22 22:14:59 · 700 阅读 · 0 评论 -
2007 Benelux Algorithm Programming Contest (BAPC 2007) A
题意:给一棵带权树,输出所有点对间的平均ju原创 2014-10-18 07:45:27 · 750 阅读 · 0 评论 -
hdu 5029 Relief grain
题意:n个城市组成树型结构,有若干次操作,原创 2014-11-25 15:52:25 · 661 阅读 · 0 评论 -
poj3294 Life Forms
题意:原创 2014-10-18 15:43:44 · 431 阅读 · 0 评论 -
zoj 3813 Alternating Sum
题意:原创 2014-11-19 10:54:42 · 574 阅读 · 0 评论 -
Codeforces Round #278 (Div. 1) B
B. Strip 题意:n个数,需要把他们切割成尽量少的部分,每部分连续,长度至少为l,其中最大数与最小数的差不能超过s。 思路:首先,预处理每个区间内的最大数和最小数(spare table),然后就可以用dp的方法解决这个问题。dp的时候,利用预处理,对每个位置i找到以i为结尾,最左边能在哪个地方切割(二分查找,位置记为j),所以以i原创 2015-01-04 17:17:08 · 522 阅读 · 0 评论 -
hdu 4006 The kth great number
动态询问一些数中第k大的数(没有删除操作)。为了学习AVL树,用AVL码的,居然1A了,但是效率并不比普通二叉树有所提高。做法是在AVL树的基础上,维护每个节点的大小,根据大小信息查找第k大。#include #include #include #include #include #include #include原创 2015-02-26 15:35:48 · 526 阅读 · 0 评论 -
cdq分治 -- CF edu13 F Lena and Queries
F. Lena and Queries 我的第一道cdq分治,简直绝妙。。由于点会被删除,相当于每个点有一个作用区间[l,r][l,r]。对询问分治,每次在分治区间内求凸壳(只使用作用区间包含分治区间的那些点求),更新答案。至于每个点出现在了哪些区间,用线段树维护。#include <bits/stdc++.h>using namespace std;#define ll long longcon原创 2016-07-06 10:16:00 · 772 阅读 · 0 评论 -
《补题栈》
“栈”这个数据结构,想必大家都很熟悉,它满足“后进先出”的性质。 squee_spoon做题的时候,有一种强迫症,即他总是先做最近的题目。例如,squee_spoon还没有解决问题a的时候,看到了问题b,那么他就会暂时放下a,先解决b。我们可以认为,squee_spoon做题总是严格满足栈的性质。然而squee_spoon太弱了,总会有一大堆未解决的问题,在问题积压数达到m的时候,他将难以维原创 2016-03-26 11:01:01 · 513 阅读 · 0 评论 -
LA 4670 Dominating Patterns
题意:给出n个dan原创 2014-09-11 10:57:29 · 443 阅读 · 0 评论 -
poj 2104 K-th Number
第一道主席树。。说下理解。首先把数离散化成1~n,然后建立n+1棵线段树,第i棵树存的是前i个数加入后,各个区间有多少个数。第i棵树,实际上只有log(n)个节点和第i-1棵树不同,利用之前的节点,可以大大节省空间。 对于查询lr,这个区间的内容实际上是r和l-1两棵树的差。这样就可以在log(n)的时间内得到区间第k小。#include #include #includ原创 2016-02-05 16:58:00 · 336 阅读 · 0 评论 -
Codeforces Round #340 (Div. 2) E XOR and Favorite Number
XOR and Favorite Number这把CF明显题风不太对,前四道一眼题,最后来个模板题。不过正好给我科普了莫队这个姿势。莫队其实更像是一种思想,而不是一个具体的算法。总结下,它能处理的问题是无修改的区间查询,方法是按总长度的平方根分块,然后将询问排序(先按左端点所属块,再按右端点),离线求解。这道题,先预处理前缀异或结果,记为prefixprefix,[l,r][l,r]的答案就是pre原创 2016-01-25 18:05:40 · 405 阅读 · 0 评论 -
hihoCoder 1236 Scores(2015 北京网赛 J)
Scores 有n个五维的向量,给q个询问,每个询问是一个五维向量,回答有多少个向量没有一维大于它。对每一维分别排序,然后以若干个[比如sqrt(n)]为一段,压到一个bitset去,对每个询问求每维结果,与运算后count1的个数。 注意这题有个坑人的条件,就是除第一个询问外,之后每个询问都要和前一个结果与一下。。我没看到跪了无数发。#include原创 2015-09-21 22:26:04 · 892 阅读 · 0 评论 -
poj 1151 Atlantis
求矩形面积并。。扫描线第一题。把x坐标离散化,y坐标排序,从低到高一条一条线段处理,每次得到前一段面积。#include #include #include #include #include #include #include #include using namespace std;int n;struct Seg{ double xl,xr; double原创 2015-08-03 21:03:34 · 357 阅读 · 0 评论 -
poj 3074 Sudoku
求一个9*9的数独的解,保证有唯一解。DLX模版题,做题的时候,我发现回溯时如果不是和搜的过程刚好逆回去的话,效率会降低不少,但这不影响正确性,不知道为什么。。。#include #include #include #include #include using namespace std; #define ll long long原创 2015-05-21 15:20:42 · 561 阅读 · 0 评论 -
hdu4069 Squiggly Sudoku
解一个9*9的数独,行和列和普通数独一样需要出现1~9,但是它的小区域不是方形的,而是一个不规则的面积为9的图形。 DLX模版题。位运算和dfs处理小区域的边界就不说了。DLX搜解,搜到一个解以后继续搜,如果搜到第二个解则说明有多解,立即跳出。需要注意的是,搜到第一个解以后,需要保存解,不然继续搜索原来的解会被破坏。#include #include #inclu原创 2015-05-20 21:08:38 · 573 阅读 · 0 评论 -
Codeforces Round #301 (Div. 2) E
E Infinite Inversions 一个无穷的数列1,2,3......进行n(n 考虑到交换的数可能比较大,但是交换的次数相对少,可以用离散化解决。离散化以后,模拟一下操作。然后逆序对可以分为两部分考虑,一部分是被交换了的数之间的逆序对,另一部分是被交换的数与没交换的数之间的逆序对。在这个数列中,每个数是唯一的,用离散化后的值借助树状数组可以得出被交换原创 2015-05-02 01:07:13 · 708 阅读 · 1 评论 -
hihoCoder 1156 彩色的树
http://hihocoder.com/problemset/problem/1156描述给定一棵n个节点的树,节点编号为1, 2, …, n。树中有n - 1条边,任意两个节点间恰好有一条路径。这是一棵彩色的树,每个节点恰好可以染一种颜色。初始时,所有节点的颜色都为0。现在需要实现两种操作:1. 改变节点x的颜色为y;2. 询问整棵树被划分成了多少棵原创 2015-04-27 19:41:07 · 836 阅读 · 0 评论 -
hdu 3074 Multiply game
一个数列,有两种操作。一是修改数列中某个数,二是求数列中连续一段的积。 很明显的线段树单点更新模版题。#include#include using namespace std; #define lch(x) ((x)<<1) #define rch(x) (((x)<<1)|1) #define ll long long const int mod = 10原创 2015-04-22 11:50:00 · 499 阅读 · 0 评论 -
Codeforces Round #287 (Div. 2) C
507C - Guess Your Way Out! 题意:遍历一棵满二叉树,遍历方法是左右左右递归地遍历。树高度为h,最下层第n个节点是出口,问访问到出口前要访问多少个节点。 思路:按题目要求的顺序去递归遍历,判断出口在以当前节点为根的左子树还是右子树中,如果是在后访问的子树中,直接加上2^h,因为根加上另一颗子树刚好有2^h个节点,再往下递归。原创 2015-01-24 18:45:24 · 597 阅读 · 0 评论 -
poj 3481 Double Queue
有三种操作,添加客户,输出优先级最高的客户并删掉,输出优先级最低的客户并删掉。作为学习splay的题目,敲出了人生中的第一颗splay。居然和时限一样AC。 小发现:因为写的是指针版的splay,后来加了一句free,把删除的节点free掉,运行快了不少。#include #include #include #include #incl原创 2015-02-27 14:58:46 · 569 阅读 · 0 评论 -
Codeforces Problem - 13E Holes
Holes n个洞1~n,每个洞有一个power,a1~an。把球扔到第i个洞,它会蹦到第i+ai个洞去(一直往后蹦,直到n以外)。有m次操作,分为两种,0是询问把求扔到某个洞,最后能到达哪个洞以及会蹦多少次,1是修改某个洞的power。 这是在CF上一篇讲数据结构的博客上看到的题,学到了一个新的姿势。。方法是分块维护,每块的大小是sqrt(n)。对原创 2015-01-25 12:56:23 · 732 阅读 · 0 评论 -
poj 2418 Hardwood Species
统计每个单词出现的频率。这题可以用各种数据结构做,作为练习,又敲了一个AVL树。#include #include #include #include #include #include #include #include #include #include using nam原创 2015-02-26 16:07:29 · 412 阅读 · 0 评论 -
Codeforces Round #254 (Div. 2) B
B. DZY Loves Chemistry题意:原创 2014-10-16 21:06:47 · 475 阅读 · 0 评论 -
hdu 3974 Assign the task
题意:一个公司。原创 2014-11-01 11:27:33 · 428 阅读 · 0 评论 -
hdu 3999The order of a Tree
题意:给一个序列,建一棵二叉搜索树,然后求一个序列,原创 2014-09-29 19:40:50 · 521 阅读 · 0 评论 -
UVa 11468 Substring
题意:给出一些字符原创 2014-09-12 17:10:31 · 442 阅读 · 0 评论 -
UVa12096 The SetStack Computer
题意:集合栈计算机。。这是迄今为止我见过的最奇葩的一道题。有一个栈,栈中yua原创 2014-08-29 15:18:46 · 912 阅读 · 0 评论 -
poj3468 A Simple Problem with Integers
题意:n个数,你可以给一个区间加上c,或者询问一个区间的和。原创 2014-09-23 10:33:33 · 428 阅读 · 0 评论