
数据结构 树 结构
文章平均质量分 78
yuhong_liu
这个作者很懒,什么都没留下…
展开
-
hdu1512-Monkey King- 左偏树+并查集
题意:有n个猴子,,一开始每个猴子只认识自己,每个都有自己的力量 m个操作,每次给x y,表示x和y打架,先判断x,y是否有同一个老大,如果是,输出-1,不打,否则,让各自的老大(种群中力量值最大者) 打一架,后果是各自老大力量值减半,从此两个种群合并,仍旧是力量值最大的为新老大。输出新老大的力量值。思路:对于记录猴子的种群,就是用并查集,每次让猴子种群中力量最大的来打原创 2015-08-10 21:09:05 · 485 阅读 · 0 评论 -
POJ2886-Who Gets the Most Candies?-模拟约瑟夫环+反素数表(线段树上二分+爆搜打表)
http://poj.org/problem?id=2886题意,就是让你模拟约瑟夫环,给n,m,n是人数,m是第一个出局的人给数组a[],a[i]表示第i个人出局后,下一个出局的人是i的位置往右数第a[i]个人(如果a[i]让你求出出局的人中,他的出局序号的约数个数最大的一个人,如果个数相同输出最早的一个输出名字和约数个数也就是1-n里 约数个数最原创 2016-03-03 10:25:29 · 676 阅读 · 0 评论 -
POJ-1195-Mobile phones-裸二维树状数组(单点更新,矩阵求和)
http://poj.org/problem?id=1195题意就是 对单点更新,每次对一个子矩阵求和啦。。。。仅要实现这个功能的话,二维树状数组比二维线段树代码短了不是一点半点......一维树状数组的更新void add(int x,int val){ for(;x<=n;x+=lowbit(x)) { num[x]+=val;原创 2016-03-03 22:51:59 · 528 阅读 · 0 评论 -
cf#ECR10-D. Nested Segments-树状数组+二分
http://codeforces.com/contest/652/problem/D题意,给n个区间(端点保证不重复)输出每个区间包含了多少个区间先存起所有区间的左右端点,并依次对应编号然后把左右端点 分别从小到大排序并开一个树状数组,每个点对应着Yi,初始化值全为1从小到大遍历左端点,对于X1,找到其原始编号id,然后再找出对应的Y然后在原创 2016-03-26 00:09:34 · 437 阅读 · 0 评论 -
codeforces#225-C - Propagating tree-dfs序(奇偶)+线段树
http://codeforces.com/problemset/problem/384/E题意:给一棵树,根为1,根高度为1,每次操作 两种 1:x,val, 把x节点加val,把其所有儿子-val,把儿子的儿子都+val,反复如此2:查询某个节点的值对每次操作,显然就是把该节点的所有子节点中,奇偶性与X相同的+val,不同的则-val,如此反复我们先跑原创 2016-03-26 22:38:14 · 443 阅读 · 0 评论 -
求第k大连续区间和/第k大子序列和 - 二分+树状数组+前缀和(或主席树+堆)
给你n,再给你n个数,最后给一个k求出这个序列的第k大连续区间和;N(1ai(1K(1思路:预处理前缀和。并将其离散化(去重)。二分答案,然后每次判断中,遍历前缀和Bi,然后查找有多少个jX,也就是有多少个子序列的和是大于X的,即使求有多少个Bj小于【Bi-X】,这部分查询我们可以用树状数组实现,方法类似于树状数组求逆序对。 查询方法简要说一下,原创 2016-03-19 17:32:10 · 3869 阅读 · 0 评论 -
cf#305-D. Mike and Feet- 单调栈/ (线段树上二分)
http://codeforces.com/contest/548/problem/D题意:给一个n长度的数组strength 的定义为 当前数组里面 的最小元素 即为 当前数组的strength 求出给出数组的 长度为 i 的子数组(连续) 的最大的strength值 -- i 是【1,n】;思路:一开始想先对元素的值和位置排序,如果当前元素为i原创 2015-10-12 16:27:00 · 597 阅读 · 0 评论 -
HDU 4358-I - Boring counting-dfs序+离线+树状数组/线段树
http://acm.hdu.edu.cn/showproblem.php?pid=4358题意:给你一颗树,n个节点,每个有其权值。给一个k。q次询问,每次询问 以x为根节点的子树里,有多少种权值恰好出现次数为k。我们先求个dfs序,把树型结构转为线性数组。那么题目变成q次查询,每次查询区间L【x】,R【x】之间有多少个权值,出现的次数恰好为k而本原创 2016-04-23 10:26:34 · 541 阅读 · 0 评论 -
Balanced Lineup-POJ - 3264-RMQ线段树/st表
可以用RMQ线段树,或者st表rmq线段树 建树 查询都是logn 支持更新元素 st表建树logn 查询o(1)! 不支持更新元素以下是st表代码#include #include #include #include #include #include #include #include #include #include using namespa原创 2015-08-09 00:04:23 · 452 阅读 · 0 评论 -
UVA 11235-Frequent values-RMQ(st表)+游程编码
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23846题目大意:给一个非降序排列的整数数组a,你的任务是对于一系列询问(i, j),回答ai,ai+1...aj中次数出现最多的值所出现的次数。预处理是先把所有相同的元素合并成一个node,node含该元素编号+该元素个数 ( 称为表2)并且记录原创 2015-09-05 02:58:36 · 604 阅读 · 0 评论 -
cf#362-C. Lorenzo Von Matterhorn
http://codeforces.com/contest/697/problem/C给你一个完全二叉树两个操作1: u,v,w 把u到v上的路都加w权值2:u,v 查询u到v的权值和uv最多1e18,log一下也就是60层左右那么直接用map模拟即可mp[i]表示的是 i到其父亲的这条路的权值类似倍增算法模拟一下即可#include原创 2016-07-17 12:50:49 · 437 阅读 · 0 评论 -
HDU 5029 Relief grain-树链剖分+线段树+离线
题意:给一棵树n个点,m次操作,每次把一条x到y的链涂一个Z颜色问最后每个节点,对应被涂过最多的颜色是什么?先树剖一下,变成: m次操作,每次给一个区间染色,最后问每个点被染过最多次的颜色是什么这个问题的离线方法真的很巧妙啊。。。根据颜色开一个线段树,第i位置表示颜色i出现过东西次开一个vector s[maxn],假设在【l,r】中涂上颜色c,则s[l]原创 2016-08-16 19:24:25 · 354 阅读 · 0 评论 -
LA3938-Ray, Pass me the dishes!--动态最大连续区间和(线段树+前后缀数和组)
题意:给一个数组,求任意区间的最大连续和 长度n,查询次数m n,m大小是5*10^5每个数不超过1e9之前做的是静态数组求一次最大连续和,方法有很多,dp之类的都能o(n)解决。 还有一个是分治法,nlogn解决:http://blog.youkuaiyun.com/viphong/article/details/48221429这里也是用分治法的思路解决:称区间【l,r】的最大原创 2015-09-05 18:29:13 · 1707 阅读 · 0 评论 -
HDU 5044-tree-树链剖分+树状数组
裸的树链剖分,似乎数据有点大。用线段树维护会T,加个读入挂,树状数组能怼过去。。。似乎连树状数组都没必要了。直接用数组也可做...#include #include #include #include #include #include #include #include #include #include #include #include using原创 2016-08-18 19:22:18 · 601 阅读 · 0 评论 -
hdu-4027-线段树+暴力
题意:给一个数组序列, 数组长度为100000 两种操作: 一种操作是将某一个固定区间所有数开方(向下取整)另一种操作是询问某个区间的所有数字之和。由于数不超过2^63,因此开个七八次就变成1,由于只有开方,没有修改操作,直接暴力开方,对于sum[i]==r-l+1的区间不作处理(再开也没意义了)#include #include #include #原创 2016-08-15 18:49:30 · 1195 阅读 · 0 评论 -
UVALive 4730 -树状数组+带权并查集
题意:有T组测试数据,每组数据的N表示有N个城市,接下来的N行里每行给出每个城市的坐标(0(1)"road A B",表示将城市A和城市B通过一条道路连接,如果A和B原来属于不同的城市群,经过这个操作,A和B就在一个城市群里了,保证每条道路不会和其他道路相交(除了端点A和B)。(2)"line C",表示查询当穿过y=C的直线,有多少个城市群、这几个城市群一共有多少个城市。以C原创 2016-08-18 23:19:03 · 419 阅读 · 0 评论 -
POJ 3237 Tree (树链剖分+线段树)
题意:http://poj.org/problem?id=3237给一棵树,操作三种 CHANGE i vChange the weight of the ith edge to vNEGATE a bNegate the weight of every edge on the path from a to bQUERY原创 2016-08-09 21:38:09 · 658 阅读 · 0 评论 -
BZOJ-2243: [SDOI2011]染色-树链剖分
http://www.lydsy.com/JudgeOnline/problem.php?id=2243Description给定一棵有n个节点的无根树和m个操作,操作有2类:1、将节点a到节点b路径上所有点都染成颜色c;2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“原创 2016-08-10 02:00:09 · 849 阅读 · 0 评论 -
poj2750-Potted Flower-动态求最大连续环区间和(线段树上分治+set维护)
http://poj.org/problem?id=2750题意,给你n个数,首尾相接,让你求最大连续环区间和首先知道这个最大连续和只有两种情况,1是不跨越首尾的,这种直接求2是跨越首尾的,显然最大连续和是跨越首尾的,那么最小连续区间和必然在1-n之间,所以我们只需要求最小连续和,然后sum-它就得到最大连续和如果只求一次,可以dp就好了,但是由于每次动态更新单点,所以原创 2016-03-03 21:14:24 · 520 阅读 · 0 评论 -
HDU1556-Color the ball-线段树成段更新入门题/前缀和
线段树成段更新的裸题。。。。。因为没强制在线,用前缀和水了一发 700mshttp://acm.hdu.edu.cn/showproblem.php?pid=1556用线段树水了一发。。。1600ms。。。区间线段树 和 前缀和数组记录两种方法都可以实现 单点/区间更新(logn)、单点/区间查询(logn) 不同就是 前者是 在线算法,即可以边更新边查询(logn),后原创 2015-08-12 02:56:04 · 784 阅读 · 0 评论 -
Fast Arrangement-3577-线段树成段更新
本题超坑爹,先是题意看了半个多小时都不理解样例,后来去找别人的题解才看懂了。问题是,给k,q k是火车最多能运载的人数,q是询问次数q行 每行两个数a,b 指有一个人要从a站做到b站,是否合法即,第一次假设列车是从1开始,一直走到尽头(1000000)当火车遇到一个(a,b)时 ,先查询区间(a,b-1)的值是否小于k(表示列车在这段路上搭载少于k个人),若是,就把区间(a,原创 2015-08-12 11:13:06 · 509 阅读 · 0 评论 -
hdu5444-Elven Postman-最最朴素的二叉搜索树
就是裸的二叉搜索树只需要在插入的时候 给节点附加一个W或E的信息查询时输出该信息就可以这么水的题居然没看到。。。#include #include #include #include #include #include #include #include #include #include #define inf 0x7fffffff#def原创 2015-09-15 00:29:39 · 593 阅读 · 0 评论 -
Huffman编码的设计与应用
1、问题描述给定n个字符及其对应的权值,构造Huffman树,并进行huffman编码和译(解)码。构造Huffman树时,要求左子树根的权值小于右子树根的权值。进行Huffman编码时,假定Huffman树的左分支上编码为‘0’,右分支上编码为‘1’。2、算法 构造Huffman树算法:⑴、根据给定的n个权值(w1, w2, …, wn)构成n棵二叉树的集合F={T1,原创 2015-10-29 14:28:58 · 1629 阅读 · 0 评论 -
POJ-2503-查单词
http://poj.org/problem?id=2503好多方法做map 900ms / hash+sort+二分 400ms / hash查找 400ms /trie 361ms 除了第一个后面都差不大多。。当然和实现有关代码就贴个trie吧#include #include #include #include #include #inclu原创 2015-11-21 00:41:08 · 341 阅读 · 0 评论 -
Gym 100490E-E - Environment Problems- 伸展树/平衡树/离散化点
题意:n次操作操作1给区间【a,b】加上1操作2查询某个点x的值。。。。这不就是线段树的区间更新单点操作嘛。。。。。然后1思路: 把每次输入的l 存到一个有序集合,每次输入的r存到一个有序集合然后对于每次查询的点X。我们只需要看大于该点X的l有多少个,大于等于该点X的r有多少个,然后用r的个数减去l的个数。就得到该点被覆盖的次数了...也就是该点的值实现:1、每次插原创 2015-08-20 00:50:32 · 948 阅读 · 0 评论 -
POJ-1656-Counting Black- 四分树
http://poj.org/problem?id=1656题意很直白, 对100*100的矩阵操作,置位操作:每次把一个子矩阵置为0,或1,查询操作:每次查询一个子矩阵的1个个数;当然n只有100暴力是没问题的,如果n更大 就得用二维线段树来写,二维线段树有2种写法,一是树套树,二就是下面这种 四分树的写法:二维线段树其实还是用一维时的思想。一维的时候父原创 2015-12-02 17:17:09 · 1080 阅读 · 0 评论 -
poj-2513-Colored Sticks-字典树trie / hash +并查集 欧拉回路
..........一看到题。。试着用hash水一下。。wa用map水一下TLE。。好吧。。trie试一下。。。wa .wa .wa.....好吧。。最后发现是自己傻逼了。。。 窝一开始犯了傻逼错误,以为 直接 计算颜色出现的种数。。。奇数个数的颜色为0或2 就 合法。。然而这只是必要条件.....不是充分条件...........原创 2016-01-17 22:20:58 · 471 阅读 · 0 评论 -
cf-edu#6- E - New Year Tree -dfs序+线段树维护
http://codeforces.com/contest/620/problem/EC《60,n题意:给你n个节点的 无向有根树 给你每个节点的初始颜色ciq次操作操作1:1 v k 把v节点的所有子节点颜色都换成k操作2:2 v 查询v节点的所有子节点颜色种类先dfs跑一遍得到 一个dfs序把每个节点涂上初始颜色, 每个节点在dfs序中的位置是i原创 2016-01-22 16:50:52 · 728 阅读 · 0 评论 -
HDU-3887-Counting Offspring-dfs序+树状数组
http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=21535题目大意: 给你一颗n个节点的数,对于每个节点i,问你每个节点的子树中有多少个节点序列数小于i,求f[i]。先跑一遍dfs,得到dfs序,树状数组初始化为空然后我们从 节点编号1遍历到n对于每个节点编号i,查询 【in[原创 2016-01-22 15:32:25 · 752 阅读 · 0 评论 -
poj3321-Apple Tree-dfs序+树状数组
http://poj.org/problem?id=3321给你一颗树,最初每个节点上都有一个苹果,有两种操作:修改(即修改某一个节点值为0或1)和查询(查询某一个节点的【子树】上有多少个苹果) 这个在树上跑一遍dfs,得到树的dfs序,每个节点管辖的区间就是in[x] - out[x] 这个区间上的节点都是 节点x的子节点,其中in[x]是x自身那么接下来的对原创 2016-01-22 14:57:06 · 608 阅读 · 0 评论 -
CF#The Union of k-Segments -离散化+树状数组
真是写得太挫了。。离散化+树状数组 3S。。。#include #include #include #include #include #include #include #include #include #include using namespace std;struct node{ int l,r; node(){} n原创 2016-01-06 19:57:56 · 456 阅读 · 0 评论 -
HDU-1823-Luck and Love-二维线段树入门
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14799题意:Luck and LoveTime Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64uSu原创 2015-11-20 00:32:51 · 390 阅读 · 0 评论 -
CF#321-DIV2-E. Kefa and Watch-线段树+字符串哈希
题意给你一段长度为n的字符串,给你m,k,表示有m+k次操作格式 operation L R Doperation =1; 表示把第L到第R个字符改为doperation =2;表示求 L到R这个字符串是否存在长度为d的循环,是输出YES,否则NOn=10^5; 操作也是10^5思路:一开始看到区间修改,觉得可以是线段树...然后要 查询循环节。。。想到原创 2015-10-04 14:58:18 · 727 阅读 · 0 评论 -
CF#310-E - Case of Chocolate-(set+贪心)/(线段树+离散化)/(隐式线段树)
看了官解 是用2个线段树,一个维护横坐标,一个维护纵坐标(要离散化).......还有后面的隐式线段树还没看后来看到另一种方法、仔细分析下题目的操作,其实很简单。用两个set维护 横纵坐标、分别叫row(水平方向)、high(竖直)分析两种情况:对于(xi,n+1-xi),若是向上吃,能够影响它的操作(xj,n+1-xj)一定是右边第一个点,若点i右边有点:如果原创 2015-09-30 03:12:56 · 670 阅读 · 0 评论 -
hdu-5475-An easy problem-线段树求乘积
题意。初始X=1;给n,mod ,表示n次操作操作1格式 : 1 b 表示用x乘上b操作2格式: 2 n 表示 当前x除掉第n次 "1操作” 的数每次操作输出一个答案,输出的答案是要对mod取模由于有除法所以我们不能每一步取模一直在想什么办法能过。。。最后卡死了。。赛后才知道 直接就是一个长度为n的rmq线段树每个点维护一个数 初始值为1操作1 就是原创 2015-09-26 23:50:41 · 559 阅读 · 0 评论 -
LA-11992-Fast Matrix Operations 快速矩阵操作(线段树成段更新)
题意:给定一个r*c(r1 x1 y1 x2 y2 val 表示将(x1,y1,x2,y2)(x12 x1 y1 x2 y2 val 表示将(x1,y1,x2,y2)(x13 x1 y1 x2 y2 val 表示输出(x1,y1,x2,y2)(x1线段树基本功能啦。。开r个线段树..(最多20).每次对r个线段树操作就好了这里有个问题就是,set和a原创 2015-09-06 18:19:40 · 877 阅读 · 0 评论 -
LA-4329 Ping pong - treap (排名树)/树状数组求排名
题目https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=26&problem=2330&mosmsg=Submission+received+with+ID+1779597题意: 一条大街上住着n个乒乓球爱好者,经常组织比赛切原创 2015-09-05 01:00:00 · 647 阅读 · 0 评论 -
D - Data Mining-Gym 100496D-离线处理+树状数组+离散化
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=193991//去重离散化+离线处理思想//题意是 【取1,N】数组中a为起点的后缀数组,映射为字典序最小的序列,求该序列第b个元素的映射//Gym 100496D 其实就是求位置[a,b]中,b位置对应的元素在区间最靠左的位置 前面有多少种不同的原创 2015-08-13 01:16:54 · 676 阅读 · 0 评论 -
hdu-4757-Tree-树链剖分+可持久化字典树
http://acm.hdu.edu.cn/showproblem.php?pid=4757这题就是n个点,一棵树,n-1条边m次询问,询问为 (x,y,z)问x到y的路径上哪一个数与z异或的值最大先考虑给一个数组,问你哪个数与Z异或的值最大,做法参考http://blog.youkuaiyun.com/viphong/article/details/52167649就原创 2016-08-10 11:32:40 · 754 阅读 · 0 评论