数据结构
文章平均质量分 55
samjia2000
I swear...
We are INFINITE.
展开
-
【POI2008】STR
题目大意 给出一个平面内的n个点,有一系列询问形如:x0,y0,x1,y1x_0,y_0,x_1,y_1,输出平面的点中更接近(x0,y0)(x_0,y_0)的个数,更接近(x1,y1)(x_1,y_1)的个数,与两点距离相等的点的个数。主要思想 可以按照询问分6种情况讨论! 以上六种情况中,p1p原创 2015-08-11 21:45:15 · 656 阅读 · 4 评论 -
Treap学习小计
啊啊啊啊,终于学会打treap了啊啊啊啊啊一个小故事从前,Tree和Heap相遇了,他们相爱了,于是生下了一个孩子,他叫什么呢?于是他姓Tr名字叫eap,所以他就叫Treap(啦啦啦啦啦啦啦)Treap的性质既然他爸是Tree,他妈是Heap,那必定会遗传他爸和他妈的血统啊。 所以他是棵Balanced Binary Tree,同时从其每个点的键值来看,他的形态又是一棵不严格的Heap,当然由于这原创 2016-07-06 19:55:48 · 477 阅读 · 2 评论 -
Hackerrank Sequential Prefix Function
题目链接:https://www.hackerrank.com/contests/w22/challenges/sequential-prefix-function 这竟然是一道水题,当时打比赛时竟然没有好好看题。。。悲哀。。。题目大意有两种操作,分别是在字符串末尾加上一个字符或者删掉字符串的末尾的字符,要求动态维护kmp。 n≤2∗105n\le 2*10^5解法1首先可以建出一棵AC自动机,原创 2016-08-17 17:33:15 · 628 阅读 · 3 评论 -
codeforces 702F T-shirt
题目大意给出n件T-shirt的重要程度q[i]和花费c[i],有k个人最开始分别有b[i]的金钱,每个人的选衣服的策略都是一样的:将所有T-shirt按照重要程度从大到小排序,重要程度相同的按花费从小到大排,然后每个人从头开始取T-shirt,如果金钱数大于当前的T-shirt的花费,那么就买下这件衣服,问每个人最多能够买的T-shirt数量。暴力暴力很显然,就是一个个枚举吧。 另外一种暴力是这原创 2016-08-18 11:46:02 · 1202 阅读 · 0 评论 -
可持久化Treap学习小结
可持久化Treap与Treap可持久化Treap与Treap的区别在于哪里? 维持平衡的方式:可’用Split和Merge,而Treap使用rotate Other:可’可以分裂(Split)和合并(Merge)MergeMerge操作类似于线段树的合并,但是Merge的两棵Treap一定要保证一棵的key值都小于第二棵的key值int Merge(u,v){//保证u的子树的key值小于v的子原创 2016-08-18 14:36:41 · 1300 阅读 · 1 评论 -
Hackerrank 101 Hack 42 Array Pairs
题目来源:https://www.hackerrank.com/contests/101hack42/challenges/array-pairs题目大意给出长度为n的序列a,求有多少点对(i,j)满足1≤i<j≤n且ai×aj≤max(ai,ai+1,...,aj)1\le i<j\le n且a_i\times a_j \le max(a_i,a_{i+1},...,a_j) 1≤n≤5×105原创 2016-11-01 17:23:59 · 648 阅读 · 0 评论 -
Codechef DEC16 SEAINCR
ProblemU are given an array AA consisting of NN integers.There are MM queries(Li,Ri)(L_i,R_i)and u are required to find the length of the longest increasing subsequence in the array A[Li...Ri]A[L_i...R原创 2016-12-14 21:54:09 · 614 阅读 · 1 评论 -
hihocoder 1381 Little Y's Tree
Problem有一棵有n个节点的树,每次询问删掉k条边后剩下的k+1个联通块里的直径的和。Solution虚树典型套路,考虑怎么维护每个联通块的直径,显然把树看成有根树的话,每棵树因为子树的边被删掉从而在dfs序上变成了若干块,但是由于删掉一条边只会对其直接的父亲产生1的影响,所以加起来是有O(k)块的,那么就只要用线段树维护一下直径,打起来挺快的,一次过掉。Code#include<iostrea原创 2017-02-22 15:35:05 · 412 阅读 · 0 评论 -
[bzoj4293][PA2015]Siano
于是就此成为了权限狗2333题目大意有n棵草,第i棵草每天长高a[i],有m次操作每次会在某一天将所有超过某个高度的部分都砍掉,初始草的高度都是0,对于每次操作输出砍掉了多少。题解由于初始都是0,那么画一下图发现草高度的相对顺序是永远不会变的,于是可以直接用线段树维护,操作时先在线段树上二分,然后修改比较trick,懒标记维护的是这个区间的草上一次被砍掉是什么时候以及上次剩下的是多高,然后就可以直接原创 2017-03-15 15:36:56 · 654 阅读 · 0 评论 -
JZOJ3745
给初中的讲题,顺便打下练手题,然而发现我已经是老年选手了,平时口胡太多打题会死的。。。竟然把dep打成dfn,本来是区间修改单点查询的线段树,为了常数改成单点修改区间询问,然而我打了单点询问。题目我们有一个树,大小为n。考虑树上的一条路径,如果一个边的两个点都在这路径上,我们称这个边属于这个路径,如果一个边有且只有一个点在这路径上,我们称这个边与这个路径相邻。现在每个边要么是黑色的要么是白色的,一开原创 2017-04-02 21:31:48 · 481 阅读 · 0 评论 -
【HNOI2015】开店
题目大意给出一棵有n个节点的树,每条边有个边长,每个节点有个权值a[i],有q个询问形如”u l r”询问点u到所有权值在l到r之间的点的路径长度和一眼解法一个点与多个点之间的距离和,显然我们可以用点分治来做,对于每个分治中心,我们将其所有该层的点都记录下来,那么每层共有n个,最多nlog2nnlog_2n个,同时,在我们计算答案时要计算每个分治中心对其父亲的影响。 询问时我们就直接在重心树上跳,原创 2016-07-03 21:25:46 · 679 阅读 · 0 评论 -
【NOIP2016A组模拟7.13】搬运干草捆
题目题解做模拟赛时我就想了出来,然而删除节点时没有更新father,于是GG…… 首先可以列出一个DP的式子f(i,j)=min(f(i−1,k))+|j−hi|∀k≥jf(i,j)=min(f(i-1,k))+|j-h_i|\forall k\ge j 于是我们设g(i,j)=min(f(i−1,k)),∀k≥jg(i,j)=min(f(i-1,k)),\forall k\ge j则f(i,j原创 2016-07-14 15:57:41 · 471 阅读 · 0 评论 -
可修改主席树
前面讲完了主席树,那现在就来考虑可修改的主席树。 如果直接修改主席树,我们就需要用O(nlog2n)O_{(n log_2n)}的时间来逐个逐个修改,那么我们可否用更小的时间来修改呢? 我们之所以前面的主席树的修改时间如此大是因为每个rootiroot_i的主席树包含了root1,root2...rooti−1root_{1},root_{2}...root_{i-1}的主席树。 那么可不可以原创 2015-08-13 21:35:50 · 3655 阅读 · 0 评论 -
询问区间第k大(小)——主席树
例题 K-th Number You are working for Macrohard company in data structures department. After failing your previous task about key insertion you were asked to write a new data structure that would be abl原创 2015-08-13 07:47:42 · 2461 阅读 · 0 评论 -
【GDOI2013模拟4】贴瓷砖
题目大意 给出nn个模式串和一个串SS,用这nn个模式串尽量多的覆盖SS,模式串之间可以重叠,求出最少有多少个位置没有被覆盖。解法 这题有许多解法,下面列举两种: 1. 将所有模式串和要匹配的串SS反过来,然后做一次SASA(后缀数组),然后,肆意恶搞。 2. 对SS做SASA,然后对于每一个匹配串都查找一下它在SS中可能的位置,标记一下,然后,肆意恶搞。我想讲的解法 我想讲的解法是A原创 2015-08-17 20:22:06 · 638 阅读 · 2 评论 -
【GDOI2103模拟3.17】电话表
2103年的题真是超神了!!!原创 2015-08-15 07:50:56 · 495 阅读 · 1 评论 -
浅谈AC自动机
以前我觉得AC自动机很高大尚,然而并不是这样的,其实很简单。我们首先来复习一下kmpkmp和TrieTrie。KMP 一种由Knuth(D.E.Knuth)、Morris(J.H.Morris)和Pratt(V.R.Pratt)三人设计的线性时间字符串匹配算法。这个算法不用计算变迁函数δ,匹配时间为Θ(n),只用到辅助函数π[1,m],它是在Θ(m)时间内,根据模式预先计算出来的。数组π使得我们可原创 2015-08-17 19:54:29 · 737 阅读 · 0 评论 -
51NOD 1711平均数
题目大意有一个长度为n的序列a,求所有区间的平均数中第k大。看题第一眼什么鬼啊?!!二分可以想一下二分答案ans,就是要求平均数大于ans的区间个数有多少求平均数大于ans的区间个数首先转化成数学式子:sumi−sumji−j≥ans\frac{sum_i-sum_j}{i-j}\ge ans 那么式子可以再转化为: sumi−sumj≥ans×(i−j)sum_i-sum_j\ge ans\t原创 2016-06-28 19:45:44 · 865 阅读 · 0 评论 -
51NOD1766 树上的最远点对
题目n个点被n-1条边连接成了一颗树,q个询问,每个询问给出a~b和c~d两个区间,表示点的标号请你求出两个区间内各选一点之间的最大距离,即你需要求出max{dis(i,j) |a<=i<=b,c<=j<=d}做题经历由于一开始没有想出来,于是去请教了一下WerKeyTom_FTD,下面是对话: 然后,他当然给出了正解。。。。正解区间询问,应该就会与数据结构联系起来,所以我们尝试用线段树来原创 2016-06-30 15:07:01 · 1386 阅读 · 0 评论 -
[Hnoi2010]Bounce 弹飞绵羊
题目大意从左到右有n个位置,在第i个位置会被弹到第i+a[i]个位置,超出范围则挂掉,有q个操作,一种是更改某一位置上的a[i],一种是询问第i个位置什么时候会挂掉分块设f(i)为i在其块内最少跳多少次会跳出这个块,而g(i)表示他跳出块后会跳到哪个点,于是修改时我们可以重构块,询问时就一个一个块跳。时间复杂度O(nn√)O(n\sqrt n)LCT很容易发现,如果我们把跳出去都记为跳到n+1,那么原创 2016-06-30 15:30:59 · 381 阅读 · 0 评论 -
【NOI2010】超级钢琴
题目大意给出一个长度为n的序列,求所有长度在L到R之间的连续子序列的权值和的前k大的和解法首先将以每个点为开头的长度在L到R之间的序列的权值和最大的区间扔进堆里,每次拿出堆顶,然后再放入以当前点为开头的次大,如此类推,就可解决该问题了。 那么如何维护k大,下面介绍几种方法: 1、可持续化treap,每次移动一个点,相当于是一个框在移动,即加入一个,删除一个,每次直接查找就好了 2、可持续化线段原创 2016-07-14 11:45:44 · 922 阅读 · 0 评论 -
【NOI2017模拟6.23】回转寿司
题目大意有n个人排成一个圆环,每个人初始有一个数字a[i],有m轮操作,每轮操作选择一段连续的人并给出一个数字x,按顺时针顺序比较x和a[i],如果x小于a[i],就那么交换a[i]和x 1≤n≤4×1051\le n\le 4\times 10^5 1≤m≤2.5∗1041\le m\le 2.5*10^4解法考虑分块,那么对于一个块来说,如果当前某个数x进去了,那么出来的要不是x要不就是这个原创 2017-06-23 21:30:10 · 774 阅读 · 0 评论