
数据结构
摆渡过江
球可以不打,游戏可以不打,然题不能不刷
展开
-
树状数组入门(单点修改+区间查询)
问题的引入: 例:在一个【1,1000000000】的区间上改变一个位置上的值,并且求n次【x,y】内(共n个元素)的区间和; 正常思路(反正我就这么做T-T):更改进行1次操作,时间复杂度O(1),查询n次操作,时间复杂度O(n),并且n次查询区间和,所以时间复杂度O(n^2); TLE了~~~ 那怎么快点解决这个问题呢?没错,用树状数组; 单点修改+区间查询: ...原创 2018-07-31 10:35:56 · 2597 阅读 · 1 评论 -
树状数组进阶(区间更新+单点查询,区间更新+区间查询)
看完之前那篇树状数组入门(https://blog.youkuaiyun.com/qq_39562952/article/details/81296502)相信大家对树状数组有了一些了解,这次我们来看更加深一层次的树状数组应用; 问题引入: 在一个【1,1000000000】的区间上改变n次【x,y】(n个位置)的值,并且查询z位置上的元素值; 朴素的方法厉遍的时间复杂度还是...原创 2018-07-31 12:04:21 · 6180 阅读 · 0 评论 -
dancing links (精确覆盖+重复覆盖)
精确覆盖模板:(解决的问题是在01矩阵中选出最少的行,另每一列都有且只有一个1) #include <iostream> #include <stdio.h> #include <string.h> #include <iostream> using namespace std; const int MN = 1005;//最多的行数 cons...原创 2018-10-19 10:29:03 · 616 阅读 · 0 评论 -
poj3468(线段树区间查询+区间更新)
思路:很明显的线段树模板题,区间查询+区间更新 但是小弟比较菜,并不会线段树,所以现学了一波,别的还是好理解的,就是lazy标记我觉得很难理解(应该是因为我比较菜),所以请教了大佬,大佬告诉我:lazy标记就是在访问这个节点时,并且要访问子节点时,向下传递lazy标记,以减少时间;访问操作包含了(查询与更新); 代码如下: #include<cstdio> #include&l...原创 2018-11-17 15:55:26 · 240 阅读 · 0 评论 -
线段树位运算区间更新(牛客东信杯j题)
思路:其实就是区间更新的时候,不是加减数了,而是用或运算,具体看代码 #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; typedef long long LL; const int maxn = 2...原创 2018-11-25 20:01:12 · 512 阅读 · 0 评论 -
牛客练习赛34C(对用差分进行区间更新的理解)
思路:这题我一开始想到了用前缀和来直接计算查询的区间中1的个数(即:失去这个线段后会不覆盖的点数),但是不知道怎么快速更新这个点被几个线段覆盖过。看了题解恍然大悟!用差分; 差分记录的是每个元素跟前一个元素的差值,也是增量,那么区间更新[l.r]+x时,l的位置上的数与前一个数的差值大了x,r+1上的数小了x。。。求i位置上的值,就i位置的前缀和; 代码如下: #include<bi...原创 2018-12-15 12:50:35 · 258 阅读 · 0 评论