
数据结构
Wtothey
这个作者很懒,什么都没留下…
展开
-
优先对列
优先队列:STL:Priority_queue(Type, Container, Functional)Type:即类型,Container即包含数据的容器,默认vector<int>,Functional即定义元素比较方式。与队列类似,特性就是加入元素后自行排序。priority_queue包含函数:empty() 判断空与否,size() 求元素个数,top() 返...原创 2018-08-26 11:05:02 · 265 阅读 · 0 评论 -
洛谷 3373 线段树
传送门思路:关键在于乘与加的先后计算关系,(x + y) * k = x * k + y * k,从这里可以看出来,把加法转化为乘法计算,取消了+与*先后顺序pushdown时,即为乘法标记 * 原有数据 + 加法标记 * 长度。注意点:这个题数据范围取long long 读入的k也是long long,传入函数时用long long 个人wa点:pushdown时,暂存m...原创 2019-08-19 16:37:55 · 218 阅读 · 0 评论 -
线段树[模板]
建树#define Ln(x) x << 1#define Rn(x) (x << 1) | 1struct SegTree{ int l, r, data, lazy; SegTree(int l=0, int r=0, int data=0, int lazy=0): l(l), r(r), data(data), lazy(lazy) {};}t...原创 2019-08-19 10:13:47 · 144 阅读 · 0 评论 -
LCA(最近公共祖先)
lca即两点到达的第一个公共节点前两个方法取自:Cold_Chair,树剖方法取自:Frocean目录暴力往上跳倍增算法树剖法暴力往上跳先把x,y跳到同一深度,然后同时往上跳,最后fa[x] == fa[y]即找到LCA。时间复杂度与树的深度有关,则最坏情况就是一条链了。int dep[maxn];void dfs(int u){ for(int i...原创 2019-08-18 17:39:11 · 150 阅读 · 0 评论 -
二维树状数组模板
二维树状数组就是求矩阵和。一维树状数组中:C[1] = a1, C[2] = a1 + a2, C[3] = a3;记:B[1]={a11,a11+a12,a13,a11+a12+a13+a14,a15,a15+a16,…} 这是第一行的一维树状数组 B[2]={a21,a21+a22,a23,a21+a22+a23+a24,a25,a25+a26,…} 这是第二行的一维树状数组...原创 2018-08-24 18:17:21 · 163 阅读 · 0 评论 -
Japan (树状数组)
题目 题意:题意挺好理解的,就是求交叉点。 思路:样例是提示点。按照样例将公路一条一条画一下,就会发现第 i条线的交叉点数就是:在它之前的线段中终点城市标号大于它的数量。需要特殊考虑的是,出发自同一城市的线段,终点需从小到大,才不会互相影响。数据不是按照顺序排好的,所以要对数据按照西海岸城市升序排列,两个城市相同时按东海岸城市升序。 #include<cstdio>#in...原创 2018-08-21 17:13:50 · 221 阅读 · 0 评论 -
Stars 树状数组
题目传送门 题意:一个点(x , y) ,其他点(x0 , y0)中满足 x0 <= x且y0 <= y 的点的个数就是它的等级。刚开始一直不理解题意(太菜了),看了别人的博客才知道。 题解:题中数据读入已经按照 y依次增大的顺序读入了,所以之有将所有小于 x的点统计出来就好了,简单的树状数组求和就好了。#include<cstdio>#define lowbit...原创 2018-08-21 14:54:39 · 158 阅读 · 0 评论 -
Count Colors(线段树)
题目链接:http://poj.org/problem?id=2777 题意:给长为L的墙壁涂色,C涂色,P查询几种颜色。 题解:区间替换,区间查询的模板题。由于只有30种颜色,所以选择二进制状压判断状态,用Lazy-tag实现更新(即每次更新用tag标记,等到查询的时候再传下去,不清楚的话,建议百度),父节点的状态就是左孩子和右孩子的或运算,如lnode:101, node:110,则父节点...原创 2018-08-23 23:51:35 · 192 阅读 · 0 评论 -
MooFest (树状数组)
题目:http://poj.org/problem?id=1990题意:n个耳背的奶牛,第i个奶牛听到声音需要v[i]的分贝,站在x[i]位置的直线上,两个奶牛之间对话的音量是max(v[i],v[j])*两者之间的距离,问所有奶牛互相可以听到的音量和。思路:将所有奶牛按照可听到音量的大小进行排序,两只奶牛对话所需的分贝就是排在后面的奶牛的 v,所以排在后面的奶牛对排在前面的奶牛对话的音量...原创 2018-08-20 21:01:29 · 297 阅读 · 0 评论 -
A Simple Problem with Integers (线段树,Lazy-tag)
题目链接:http://poj.org/problem?id=3468 题意:就是区间加,区间查询的模板题 理解:线段树的区间加用到Lazy-tag思想,即查询到对应区间后进行加的操作,然后标记,等到下次进行查询操作,查询到这个点的时候再往下传,对子结点的区间进行加的操作,以减少时间的损耗。做这道题的时候,自己考虑了很多无谓的点,最重要的一个就是update里面的pushd...原创 2018-08-23 17:17:17 · 131 阅读 · 0 评论 -
Max Sum of Max-K-sub-sequence
题目 题意:区间连续最大和 题解:转化为求sum[i] - sum[j]最大,即求在 i位的 k区间范围内最小的sum [j],单调队列维护一下最小值就好了。 反思:对deque的理解太浅,以至于卡了很久,由于deque的迭代器失效问题,debug是会报错的,但是运行是没有问题的。 链接:https://blog.youkuaiyun.com/ww32zz/article/details/48...原创 2018-08-22 16:08:51 · 276 阅读 · 0 评论 -
RMQ With Shift
题目 题意:query就是查询,shift( a, b, c)则是单点修改,将区间的a, b, c位置的值交换,即 a位置换成 b位置的值,b位置换成 c位置的值,c位置换成 a位置的值。 题解:只要理解了题意就是一道简单的单点修改,区间查询的线段树问题。 注意:字符串转化为数字的时候记得考虑是几位数,每次都当作个位数处理了(捂脸 #include<cstdio>#...原创 2018-08-22 15:34:33 · 266 阅读 · 0 评论 -
HDU 2665 整体二分
hdu 2665 传送门题意:查询区间内第k小的数。思路:主席树或者整体二分。学习了一下整体二分,理解的还是不怎么透彻,有一些感觉,推荐文章:整体二分个人感悟:整体二分分治思想:先统计L~R内原始数列中小于等于 二分答案mid 的个数有几个;树状数组,结果为tmp 若查询区间需要的k小于等于tmp, 意味着这tmp个数中一定有它要的那个第k小数,则与原始数列中<=...原创 2019-08-18 15:42:48 · 149 阅读 · 0 评论