
数据结构--------------------------
humeay
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #307 (Div. 2) 551E - GukiZ and GukiZiana 分块
题意:就是给一个数列,有两种操作 1 l r x从l~r都+x 2 x查询最右边==x的位置-最左边==x的位置 思路: 分块一下就行了#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#inc原创 2016-03-12 20:09:38 · 307 阅读 · 0 评论 -
POJ 3237 Tree 树链剖分(路径剖分
题意:有n-1条路,形成一棵树,每条路有一个权值,有三种操作 1.CHANGE i v 把第i条路权值改为v 2.NEGATE a b把路径a~b的权值全部取反 3.QUERY a b 查询路径a~b的权值的最大值#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h原创 2016-05-16 23:28:43 · 450 阅读 · 0 评论 -
HDU3966(树链剖分) 模板题
呃…学习的话有个链接http://blog.sina.com.cn/s/blog_7a1746820100wp67.html (对没错,我就是来贴代码的…因为CF有道题要用熟练剖分所以 学习了一下#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<原创 2016-01-27 00:56:46 · 407 阅读 · 0 评论 -
BZOJ 1012: [JSOI2008]最大数maxnumber 树状数组求最值
树状数组居然还能求最值… 在http://www.cnblogs.com/iwtwiioi/p/3869868.html 这学的 %%%%%%%%%%%% 每个C[i]管理的是i-lowbit(i)+1~i的max 就像Sum数组一样,不过求1~i的最大值要i向前找log(n) 然后闲的…也很久没写splay了就写了个splay… 接下类应该会刷一些比较好的数据结构题boomshakal原创 2016-05-26 04:31:57 · 340 阅读 · 0 评论 -
单调队列1001 HDU 3706 Second My Problem First 单调队列入门题
Problem DescriptionGive you three integers n, A and B. Then we define Si = Ai mod B and Ti = Min{ Sk | i-A <= k <= i, k >= 1} Your task is to calculate the product of Ti (1 <= i <= n) mod B. 题意: 给原创 2016-06-21 21:52:23 · 358 阅读 · 0 评论 -
单调队列1002 HDU 4122 Alice's mooncake shop 对于学习单调队列的同学不建议做,浪费时间的模拟水题
Problem DescriptionThe Mid-Autumn Festival, also known as the Moon Festival or Zhongqiu Festival is a popular harvest festival celebrated by Chinese people, dating back over 3,000 years to moon worship原创 2016-06-21 21:54:27 · 304 阅读 · 0 评论 -
Codeforces Round #343 (Div. 2) 629D. Babaei and Birthday Cake 线段树
题意:给你一些蛋糕的高度和半径,蛋糕是圆柱体的。每个蛋糕有编号1~n。一个人要放置一些蛋糕遵循以下规则, 1.i只剩放在i之前的蛋糕的下边 2.只能体积大的蛋糕放在体积小的蛋糕下面思路:就是最大上升子序列 类似HDU 1087 不过数据比较大 之前我们是通过双重for来跑,但是数据大的时候只能用线段树了 先离散化成节点,然后就是普通线段树XXXX….心情无比sad 比赛结束后四分钟才敲完,原创 2016-02-21 03:15:49 · 1042 阅读 · 0 评论 -
POJ 3667 Hotel 区间合并
题意==我有一个旅馆,有M (1 ≤ M ≤ 50,000) ,现在我只用安排客人的住房和退房就行了,现在有N(1 ≤ N < 50,000)批客人找我办理住房或退房,有两种操作 1. 1 x 有x个客人住房,而且必须房间连到一起,如果有就输出最小的房间号 2. 2 A B 有客人退房,房间号是从A开始的B个房间,就是房间号从A-(A+B-1)思路:裸的区间合并….区间合并呢lsum就是代表当前原创 2015-08-26 19:56:48 · 423 阅读 · 0 评论 -
线段树 POJ2777 Count Color
题意==我有一个画板和好多好多画笔(好吧,最多也就30个),一开始我的画板上有L(1 <= L <= 100000)个小格子,并且颜色都是1。然后我就要开始画画了,我能画O (1 <= O <= 100000)笔(或者提问) 1.C A B C 我要把从A-B之间的所有格子都涂成C颜色 2.P A B 我要问问从A-B之间有多少种颜色思路:成段更新+状态压缩(因为只有最多30种颜色,所以int就原创 2015-08-26 19:44:49 · 400 阅读 · 0 评论 -
先冷静一下 线段树单点更新HDU1166 敌兵布阵
由于很久很久以前做过线段树 所以现在只是挑几道复习一下,如果需要题目可以到http://blog.youkuaiyun.com/yrhsilence/article/details/5793699由于本人被一个傻逼问题气到了=_=,而且刚好看到一个挺好的博客介绍线段树,So http://blog.youkuaiyun.com/x314542916/article/details/7837276 (别打我 傻逼问题原创 2015-08-26 19:33:32 · 464 阅读 · 0 评论 -
Codeforces Round #304 (Div. 2) 546 E - Soldier and Traveling 最大流
题意:有n个城市m条路,每个城市里有A[i]个士兵,士兵可以留在自己的城市或者邻近的城市,最后是人数是否能为B[i] 思路: 入门最大流#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#inclu原创 2016-02-28 05:46:08 · 354 阅读 · 0 评论 -
单调栈1004 scu2801 正方形
题意: 在平面 N*N ( N <= 1000 ) 的格子上有一些障碍物 要求找到一个最大的正方形,它的内部不包含障碍物 思路: 跟求矩形比起来,求一个min(Right[i]-Left[i]+1,Height[i])的最大值就行了 #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#inc原创 2016-07-17 16:02:57 · 463 阅读 · 0 评论 -
bzoj3531 [Sdoi2014]旅行 树链剖分+动态开线段树
题目: S国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足 从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行。旅行时他们总会走最短路,并且为了避免麻烦,只在信仰和他们相同的城市留宿。当然旅程的终点也是信仰与他相同的城市。S国政府为每个城市标定了不同的旅行原创 2016-05-16 20:31:22 · 460 阅读 · 0 评论 -
BZOJ 2243 [SDOI2011]染色 树链剖分+LCA+区间合并线段树
题意: 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。 思路: 这道题敲了很久…..(好恶心…. 但是AC了真的很exciting 就是要考虑到区间合并,两条链进行原创 2016-05-15 21:37:03 · 396 阅读 · 0 评论 -
Codeforces Round #333 (Div. 2) 602D. Lipshitz Sequence 单调栈
题意: 给n,q和n个数,q个询问 每个询问有l,r代表一个区间[l,r],问这个区间包含的所有子区间的L(h)值,L(h)代表区间内任选两个位置i#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>原创 2016-05-20 02:13:57 · 392 阅读 · 0 评论 -
BZOJ 4569: [Scoi2016]萌萌哒
这里考虑如果只有一个限制条件 可以暴力跑l1~r1,用并查集合并l1+i和l2+i 然后找剩下来的块数 这里有多个限制条件,所以我们把l1~r1区间看做一个点, 然后像RMQ一样倍增的思想慢慢拆分,然后用并查集合并 一共最多合并ologn次 #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>原创 2016-10-27 21:25:11 · 356 阅读 · 0 评论 -
单调栈1003 scuoj3329 Maximum Submatrix II
题意: 给一个n*m的01矩阵,求最大的只包含0的子矩阵 思路: 就把每行当做最下面的一行进行枚举 然后就像POJ2559一样做了 维护一个最小高度 #include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<sta原创 2016-07-17 16:01:56 · 307 阅读 · 0 评论 -
BZOJ 4568: [Scoi2016]幸运数字
题意: A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一。每座城市都有一个 幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征。一些旅行者希望游览 A 国。旅行者计划 乘飞机降落在 x 号城市,沿着 x 号城市到 y 号城市之间那条唯一的路径游览,最终从 y 城市起飞离开 A 国。 在经过每一座城市时,游览者就会有机会与这座城市的幸运数原创 2016-11-04 19:33:14 · 619 阅读 · 0 评论 -
HDU 5296 Annoying problem dfs序+lca
题意: 给你一棵树,然后你有一个空的集合,能对集合进行两个操作 1.添加一个点到集合内 2.删除一个点从集合内 输出集合内的点按lca来连接出来的树形图的权值和思路: 没思路…..QAQ get一个公式就是在树上求点到链的公式 就x到链(u,v) Dis=dis[x]-dis[lca(x,u)]-dis[lca(x,v)]+dis[lca(u,v)] 它确实是对的,但是我没有推出来原创 2016-09-13 16:37:52 · 396 阅读 · 0 评论 -
HDU 2665 Kth number 可持久化线段树
题意:给n个数和m个询问,询问l,r,k是从l~r中的第k小 思路:可持久化线段树的模板题 说下自己对可持久化线段树的理解吧 可持久化线段树的是可以保存历史版本的线段树,就是插进去第i个数的线段树的状态,这样我们可以通过state[r]-state[l-1]来得到state[l~r] 朴素做法就是维护n颗线段树,但是这样一般都会MLE 可持久化线段树利用了每次插入数只修改了线段树上一条链的原创 2016-05-08 21:29:10 · 521 阅读 · 0 评论 -
Codeforces Round #340 (Div. 2) 617E XOR and Favorite Number 莫队算法
题意:给一段序列和一些l,r的询问 求l,r之间有多少个连续子序列的异或=k 思路: http://www.bilibili.com/video/av4291097/ORZ卿神#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#原创 2016-05-17 03:44:17 · 370 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers (splay)
线段树的题,但是为了学splay先刷刷水题~~~ Splay的开始在这看的http://dongxicheng.org/structure/splay-tree/ 正在把代码风格换成自己的 这道题 首先建立两个节点 表示数组的首尾节点,因为Splay表示区间需要例如a~b 就必须建图为 root==a rson(a)==b 然后b的lson子树就是a~b 所以我们要求1~n的时候必须有原创 2015-12-02 21:21:57 · 320 阅读 · 0 评论 -
HDU 1890 Robotic sort (splay)
就是一些简单的旋转和删除操作 建议在这道题的时候把SPLAY写成自己的风格,不要一味的套模板,手写能更好的理解splay 注意一下什么时候该push_down 什么时候该push_up 一步错就WA#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#inclu原创 2015-12-07 21:43:30 · 473 阅读 · 0 评论 -
POJ 3580 SuperMemo splay 翻转 右移
很多解释都在代码里… 听说这种题叫填空题….ORZ 开始在insert(x+1,y+1)然后超时了….. WA的话注意一下每次是否进行Push_up 每次改变区间的值都要及时的向上Push_up,否则直接询问得不到需要的MIN#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#includ原创 2015-12-09 19:06:27 · 481 阅读 · 0 评论 -
Codeforces Round #329 (Div. 2) 593D. Happy Tree Party(树链剖分)
题意:给你一棵树,每条边上有权值。有两个操作 1. u v p 从u~v的路径上用p除每跳边的权值,向下取整 2. u p 将第u条边的权值改为p 思路:树链剖分 呃…算是模板题吧 因为这道题学了十几个小时的树链剖分 照着卿神的blog理解的Orz 这里写链接内容#include<stdio.h>#include<string.h>#include<iostream>#includ原创 2016-01-27 13:58:09 · 436 阅读 · 0 评论 -
HDU 5293 Tree chain problem dfs序+树形dp
题意: 在树上给出一些链,链上有权值 求一个最大的链集合的权值和,集合内的链不相交 思路: 把每条链的状态放到lca(u,v)上,然后进行树形dp dp[u]有两种状态 1.不取链 dp[u]=∑dp[Son[u]] 2.取一个lca(x,y)==u的链加上 因为要取这条链,所以我们应该减掉子树上取了相交的链多加的值 因为点有点多,而且对于链操作 很容易想到dfs序或者树剖(原创 2016-09-13 16:30:02 · 334 阅读 · 0 评论