随笔分类 -  数据结构们

摘要:链接:Miku 这道题虽说是要偶数个数的数的异或和,但是这就是等于区间奇数个数的数的异或和异或上数的种类的异或和 然后奇数这部分可以用前缀异或和来解决,至于种类的问题,就和HH的项链方法一样了 #include<iostream> #include<cstdio> #include<algorith 阅读全文
posted @ 2020-02-15 18:57 Simex 阅读(167) 评论(0) 推荐(0)
摘要:链接:Miku %%%ljx巨佬会莫队 这道题可以用树状数组过 首先,把所有询问按照右端点从小到大排序,这个很容易想到,然后非常容易想到,建立一个数组f, 如果数字a在i出现了,就再f[i]=1,然后统计一下区间和就可以了,当然,用树状数组优化 然而考虑一下这样的问题:区间不包含这个数了,这个数重复 阅读全文
posted @ 2020-02-15 18:34 Simex 阅读(109) 评论(0) 推荐(0)
摘要:链接:Miku 这道题本质上还是个st表,只要两个st表,然后对于每一个点,查询他开始的 长度为m的去年的最大值,最小值之差就可以了。 然而这个题还有个坑点,太大了,直接写会MLE,我们重新读一下题,题目说了区间是M。 那我们最多开到log2(m)就可以了,再大也用不到啊(这个小优化让它变成了绿题) 阅读全文
posted @ 2020-01-19 13:09 Simex 阅读(170) 评论(0) 推荐(0)
摘要:链接:Miku RMQ典型题 这道题询问最大值和最小值之差,那么我们知道最大值,最小值不就行了? 一个可以用st表,两个?两个st表。 #include<iostream> #include<cmath> #include<cstdio> using namespace std; int st[10 阅读全文
posted @ 2020-01-18 21:59 Simex 阅读(116) 评论(0) 推荐(0)
摘要:链接:Miku 单调栈模板终于不是一堆蓝题了!!!!!!!!!!!! 单调栈,就是单调的栈,栈内元素都是单调的。 题目要求我们求出来第一个比i大的元素的下标,那么我们就可以用一个递减单调栈解决。 每一个元素入栈时,和栈顶比较一下,如果比他大,那他一定是第一个比它大的。所以说记录弹出就行。 重复这个过 阅读全文
posted @ 2020-01-18 21:56 Simex 阅读(307) 评论(0) 推荐(0)
摘要:Miku 线段是是一种非常重要的数据结构,尤其在暴力时候 线段树我觉得就是一个暴力的暴力的暴力数据结构,支持许多操作,比如说最大值,最小值,区间加,区间和等 线段树的优化关键在于一个懒标记 1 #include<iostream> 2 #include<cstdio> 3 #include<algo 阅读全文
posted @ 2019-12-13 21:10 Simex 阅读(206) 评论(0) 推荐(0)
摘要:我们的生活充满了未知与玄学 链接:P5367 康拓展开在此题就是求一个全排列的排名。 我觉得它适合用来优化内存,这样存全排列虽然还要展开,但是内存小啊。 康拓展开的原理 首先,我们要求出阶乘,不然会TLE, 然后根据公式计算就可以了。 ‘但是我们怎么知道对于每一个数,他是当前没有用过的数的排名呢? 阅读全文
posted @ 2019-08-14 13:49 Simex 阅读(290) 评论(6) 推荐(0)
摘要:链接:P4939 这道题肯定是数据结构题。 看一下题面,我们可以建立一个树状数组,维护的是每一天的咕咕咕数量,这样,操作0就变成了 区间加1,而操作0,就是单点查询。 好像比较熟悉欸 就是树状数组模板二 1 #include<iostream> 2 #include<cstdio> 3 using 阅读全文
posted @ 2019-08-06 18:15 Simex 阅读(201) 评论(0) 推荐(0)
摘要:链接:P5057 [CQOI2006]简单题 其实这道题是树状数组的模板题 看一下题意,如果用树状数组,我们很容易想到差分数组。但是一般的差分数组是不行的 因为只有零和一,所以对于每一次操作,实就是让它在0和1中循环。而且,很容易得到,对于一个点进行了奇数次操作,他就会被改变,而偶数次操作就不变,知 阅读全文
posted @ 2019-07-26 11:00 Simex 阅读(188) 评论(0) 推荐(0)
摘要:链接:P3368 【模板】树状数组 2 看一下模板一?请点击 好,这道题让我们实现区间修改和单点查询。但是根据:1中我们可以发现,树状数组的操作只有修改单点和区间求和,那该怎么实现? 我们不可能强行加上这些功能,就需要进行改造。最简单的方法就是改变数组。 有一个数组,我们只要改变其中两个点,就可以实 阅读全文
posted @ 2019-07-25 18:50 Simex 阅读(156) 评论(0) 推荐(0)
摘要:链接:P3374 【模板】树状数组 1 树状数组是个很有用的数据结构,当然,有许多时候我们也可以用线段树代替他。 不过线段树比树状数组难得多,所以应该是用树状数组代替线段树才对。 比如说看看这个:[洛谷日报第22期]可以代替线段树的树状数组? 树状数组是一种基于二进制思想实现的数据结构,要用于查询任 阅读全文
posted @ 2019-07-25 18:28 Simex 阅读(187) 评论(0) 推荐(0)
摘要:链接:P1631 在做这道题前,我们来考虑这样的一个问题 已知一个n*n的数表,保证在每一行上,有a[i][j]<a[i][j+1],我们怎样求出它的第k小的值? 对于这个问题,我们 在做这道题前,我们来考虑这样的一个问题 已知一个n*n的数表,保证在每一行上,有a[i][j]<a[i][j+1], 阅读全文
posted @ 2019-07-25 10:44 Simex 阅读(204) 评论(0) 推荐(0)
摘要:这道题还是很有趣的 大佬们都用了搜索,DP等做法,而本蒟蒻刚刚学了二维前缀和,所以就用了二维前缀和来做这道题 什么是二维前缀和? (你一定知道什么是一维前缀和) 二维前缀和就是一维前缀和多了一维,它的计算公式是 s[i][j]=s[i-1][j]+v[i][j]+s[i][j-1]-s[i-1][j 阅读全文
posted @ 2019-07-24 11:10 Simex 阅读(212) 评论(0) 推荐(0)
摘要:题目链接:Miku 这道题看第一眼可能想到暴搜,从每个点开始向右找到第一个大于它的点并且计算距离 然而绝对会TLE 这时候我们就要找到一个数据结构了——单调栈。 单调栈,顾名思义,就是和单调队列一样的东西。只不过一个是栈,一个 是队列 (不知道单调队列是什么:这) 所谓单调,就是里面的元素都是按照某 阅读全文
posted @ 2019-07-23 20:17 Simex 阅读(158) 评论(0) 推荐(0)