自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Gatevin的专栏

Another blog address: gatevin.moe

  • 博客(364)
  • 资源 (1)
  • 收藏
  • 关注

原创 ZOJ 2112 Dynamic Rankings 树状数组套主席树 单点修改求动态区间第K大

题目大意:就是给出一个数列之后进行两种操作:1. 询问从第l个数到第r个数中的第k小的数2. 修改某个位置的数为t大致思路:主席树学习第二题...就是对原序列建立主席树然后用树状数组来维护另外一颗主席树来表示原主席树的变化因为每次修改都会导致需要修改一整段线段树, 那么考虑用树状数组维护, 每个位置都是一颗线段树, 这些线段树的前缀和就是对应位置的变化, 在递归

2015-09-09 23:11:09 1528

原创 POJ 2104 K-th Number 主席树 静态区间第K大

题目大意:就是给出一个静态的序列然后多次询问问某一连续的数中的第k大的数是多少, k也会变化大致思路:主席树学习第一题...这个函数式线段树的思路感觉好巧妙= =对于给出的序列离散化之后对于离散化之后的值域建线段树, 对于序列的每一个前缀都建立线段树, 然后充分利用以前的版本, 使得空间复杂度降到O(nlogn)的级别由于支持访问历史版本, 可以利用减法来得到需要的

2015-09-09 20:58:30 1131

原创 SPOJ 375 QTREE Query on a tree 树链剖分水题

题目大意:给定一棵树后两种操作修改边权, 询问两点间路径上的边权的最大值大致思路:树链剖分水题剖分之后线段树维护最大值即可, 单点更新区间查询代码如下:Result  :  Accepted     Memory  :  4403 KB     Time  :  490 ms/* * Author: Gatevin * Created Time:

2015-09-08 20:02:06 445

原创 Light OJ 1348 Aladdin and the Return Journey 树链剖分水题

题目大意:就是现在给出一个树, 有点权, 两种操作, 第一种修改某个点的点权第二种询问某两点之间的路径上的点权和大致思路:树链剖分水题....熟练剖分之后用线段树维护查询, 单点更新区间查询代码如下:Result  :  Accepted     Memory  :  4312 KB     Time  :  1004 ms/* * Author:

2015-09-08 19:30:29 558

原创 FZU 2082 过路费 树链剖分水题

题目大意:就是现在有一棵树, 每条边都有自己的边权, 然后接下来会询问两点间路径的边权和, 或者修改某条边的权值大致思路:树链剖分水题= =剖分之后线段树维护即可代码如下:Result  :  Accepted     Memory  :  5952 KB     Time  :  184 ms/* * Author: Gatevin * Creat

2015-09-08 18:49:27 630

原创 BZOJ 1036 树的统计Count 树链剖分

题目大意:给出一棵树, 3种操作1.询问u到v路径上的最大点权2.询问u到v路径上的点权和3.修改i点权值为w大致思路:树链剖分练习题第5道...很水树链剖分之后用线段树维护区间最大值和区间和即可, 单点修改区间查询代码如下:Result  :  Accepted     Memory  :  4356 KB     Time  :  2468

2015-09-08 16:28:28 534

原创 BZOJ 2243 染色 树链剖分

题目大意:就是现在给出一棵树, 两种操作1.将u到v路径上的所有点的颜色更改为c2.询问u到v路径上的点的颜色按经过顺序写成一排之后, 连续相同的数的段数大致思路:树链剖分练习第4题没有什么难度...就是用线段树维护区间中不同连续颜色数量的时候, 记录当前区间最左边和最右边的颜色然后进行合并的时候怕暖两个区间将要合并的边界颜色是否一样就行因为我使用的树链剖分模板

2015-09-08 15:39:17 455

原创 POJ 3237 Tree 树链剖分

题目大意:就是现在给出一棵树, 有边权值, 有3种操作1.询问从点a到b的路径上边权的最大值2.将a到b路径上的所有边的边权值取反3 将第i条边的权值更改为w大致思路:就是很明显的树链剖分的题, 第三道树链剖分的练习题树链剖分之后用线段树维护的时候记录当前区间的最小值和最大值然后利用懒惰标记即可代码如下:Result  :  Accepted  

2015-09-08 10:51:21 412

原创 POJ 2763 Housewife Wind 树链剖分

题目大意:就是给出一棵树然后p次操作, 每次操作询问从当前位置到某个位置的路径的权值和, 另外一个操作是修改某条边的权值大致思路:树链剖分第二题...因为写线段树的在建树的时候没有pushUp调试了一个小时才发现....感觉自己智商好捉急.....不过因为这个原因对于树链剖分的过程更熟悉了...首先在处理边的时候, 我们先将边上的信息转移到点上, 这里我们将所有的边

2015-09-07 23:40:16 344

原创 HDU 3966 Aragorn's Story 树链剖分

题目大意:就是现在给出一棵树节点个数不超过50000, 每个节点初始有个权值接下来最多10万次操作, 每次操作对于节点u和v之间路径上的所有点的权值加上一个值或者减去一个值或者询问某个节点当前的权值是多少大致思路:学习树链剖分的第一个题目....首先将树剖分之后映射到线段树维护的区间中, 然后就是区间修改单点查询的线段树问题了代码如下:Result

2015-09-07 15:58:55 465

原创 Codeforces Gym 100341I Hungry Queen 2 Set水题

题目大意:就是给出平面中n个点, 然后给出行走路径问最多走多少步不会出现不能到达以及碰撞的情况大致思路:首先如果只考虑上下左右走的话很明显用Set来存坐标然后用upper_bound查询两个点之间是否有被拦截即可那么斜着走的话, 只需要将坐标轴旋转, 例如逆时针旋转45度于是(x, y)在新坐标系中映射的位置是(x - y, x + y)(放大了sqrt(2)倍于是就和

2015-09-04 23:18:19 665

原创 Codeforces Gym 100340I Longest Common Subpair 字符串DP

题目大意:给出两个字符串P和Q, 找出两个字符串A和B使得A, B都是P的无交集子串, 同时也是Q的无交集的字串问A + B的长度最长情况下, 一个A, B的解大致思路:字符串DP, 用dp[i][j]表示以上面P的第i个字符作为结尾和以下面Q的第j个字符作为结尾向前匹配的最大长度然后f[i][j]表示P的长度为i的前缀和Q的长度为j的前缀的最长公共字串, 于是f[i]

2015-09-04 23:11:18 586

原创 Codeforces Gym 100340C ePig 模拟

题目大意:题目很长.....不过实现并不难....当年华科校赛遇到这个题没做...现在补一下就是现在P2P协议进行文件传输现在又n个客户端, 一个包被分成k个部分进行发送, 发送到所有客户端需要的时间发送规则:首先初始状态只有Client 1拥有完整文件(所有的包)进行提供每一轮 开始时所有Client机器决定需要的包, 每个Client需要的包是其没有的所有包中供源最少的

2015-09-04 23:03:13 746

原创 Codeforces Gym 100339I Sum vs Product 剪枝搜索

题目大意:就是给出 n 然后构造有重复元素的集合, 问其中一共有n个元素且所有元素和和积相同的集合有几个使用的元素必须是正整数大致思路:其实就是一个剪枝的搜索可以考虑到这样的集合数量肯定是不多的, 于是剪枝搜索即可平常搜索写的比较少....还是写了一下题解...代码如下:Result  :  Accepted     Memory  :  184

2015-09-04 22:50:36 560

原创 Codeforces Gym 100339B Diversion 树形DP + LCA

题目大意:就是现在一个图, 其中n个点, n 其中一些边是石子路一些事乡村小路, 图保证石子路形成一棵树, 使得所有城市通过石子路能相同, 另外是一些乡村小路现在要从图中删除一条石子路和一条乡村小路使得图变得不连通, 问有多少种删法大致思路:很明显是个树形DP, 对于每个石子路, 一旦被删除, 树就被切割成了一颗子树和该子树之外两个部分, 那么对应的删除乡村小路的方案就

2015-09-04 22:44:45 753

原创 Codeforces Gym 100325A String Decomposition 字符串DP

题目大意:就是给出一个长度不超过5000的字符串进行压缩S = S1(d1) + S2(d2) + ... + Sk(dk)Si是字串, di表示这个字串连续出现的次数要使得Si的总长度最小大致思路:很明显可以用DP来做思路和Gym 100337B 类似, 先处理出以 i 位置和 j 位置作为结尾向前能匹配的最大长度dp[i][j]然后枚举循环节的长度即可

2015-09-04 22:31:58 530

原创 Codeforces Gym 100337B Lempel-Ziv Compression 字符串DP

题目大意:就是现在给出一个长度不超过4096的串要求进行压缩每保留一个字符的代价是9, 用(r, len)表示的代价是25, r表示从当前位置 i 的前面 r 个字符开始连续复制写出长度为len的串需要注意的是比如ab可以复制出 ab ababa也就是复制是进行到一个部分的...刚开始这里没理解于是WA了一发..大致思路:首先预处理出字符串以i位置结尾和以j位置结尾

2015-09-04 22:26:54 672

原创 HDU 4408 Minimum Spanning Tree (图的最小生成树计数 Kruskal + Matrix_Tree定理)

题目大意:就是给出一个图求最小生成树的个数大致思路:表示写这个题的时候坑了一段时间....首先根据网上的众多题解, 通过Kruskal的边的阶段性将整个过程分为多次求缩点后形成连通分量的过程, 那么对于每个阶段就是几个生成树的方案的乘积, 然后将新产生的连通分量缩点, 一直进行到Kruskal结束对于每一阶段就是一个子图上的生成树个数的问题这个地方需要注意在计算Ki

2015-08-30 01:27:50 1189

原创 SPOJ HIGH 104 Highways 图的生成树计数 (Matrix-Tree定理)

题目大意:就是一个有n个点的无向图求不同的生成树的个数n 大致思路:利用的是Kirchhoff矩阵的性质, 也就是Matrix-Tree定理来计算图中的不同生成树个数模板题参考资料:《生成树的计数及其应用》代码如下:Result  :  Accepted     Memory  :  2.6 M     Time  :  0 ms/* *

2015-08-28 14:35:59 1043

原创 BZOJ 1588 营业额统计 (Splay Tree)

题目大意:中文题面= =大致思路:作为初学Splay的第一道练习题.....使用到的操作:1.在原序列末尾插入新元素, 键值不出现重复2. 寻找比某个键值小或者大的最近的键值, 通过Splay转为求根节点的前驱和后继代码如下:Result  :  Accepted     Memory  :  2836 KB     Time  :  140 ms

2015-08-21 16:14:31 444

原创 UESTC 94 Bracket Sequence (线段树 区间修改)

题目大意:就是对于一个由'('和')‘组成的括号序列, 现在又3种操作, 第一种是将某个区间的所有括号修改成'('或者')', 第二种是将某个区间的所有字符反向'('变成')', ')'变成'(', 第三种是询问某个区间中的括号序列是否是一个号的序列定义好的序列:1.空序列是好序列2.如果A是好序列那么'(' + A + ')'也是好序列3. 如果A, B是好序列那么A + B

2015-08-19 23:28:19 645

原创 UESTC 360 Another LCIS (线段树 维护LCIS)

题目大意:就是对于数列S, 长度不超过1e5, 有两种操作, 第一种是将一个区间当中的所有数加上一个值, 你一种是询问一个区间中的LCIS的长度, LCIS指最长连续上升子序列大致思路:考虑到线段树维护两个区间的时候满足的是广义的加法, 那么要通过两个区间的LCIS的信息得到合并的区间的LCIS的信息的话, 就需要维护者6个元素:对于每一个子区间, 维护:1. 区间左界

2015-08-18 19:35:46 559

原创 POJ 2991 Crane (线段树 维护旋转的向量和)

题目大意:就是多个木棍初始摆在y轴上相邻的木棍间有连接着他们的东西, 相当于关节然后每次操作旋转某个关节, 求旋转后的端点的坐标大致思路:首先将所有的木棍拆成多个向量, 那么考虑到向量的和v1 + v2 + ... + vk即为顶点的坐标, 并且多个向量的和旋转得到的角, 和这所有的向量都旋转同样的角再求和得到的向量是同样的也就是说向量的旋转的时机不影响加法运算于是可以

2015-08-18 00:02:31 524

原创 POJ 1436 Horizontally Visible Segments (线段树水过)

题目大意:就是现在给出n 大致思路:表示没有想到比较靠谱的计数方法, 用线段树处理出各个线段的可视情况之后如何计数感觉网上说的三重循环枚举的计数方法不可靠但是还没有想到比较好的方法, 先水过去了...注意纵坐标都乘上了2的原因是为了处理这一类情况:前面有线段(2, 0)->(2, 2) 和线段(2, 3)->(2, 5)那么当出现(3, 1)->(3, 4)的时候这

2015-08-17 18:56:29 444

原创 POJ 3225 Help with Intervals (线段树 成段更新, 懒惰标记*2)

题目大意:就是现在模拟实现区间的交并补差一系列操作, 输出最后得到的区间大致思路:首先对于区间开出两倍长度用奇数位表示区间(a, a + 1)偶数段表示端点a, a + 1之类然后对于区间上的操作用0表示这一段在区间中, 用1表示不在那么对于交和并不难映射到对应的区间更改为0和1的操作中但是在处理差的时候需要用到区间取异或值的操作于是需要用到两个懒惰标记, 一个

2015-08-17 16:18:03 474

原创 POJ 2528 Mayor's posters (线段树+离散化 成段替换)

题目大意:就是在一段区间上贴海报, 后来的区间会把前面来的区间覆盖掉, 为贴完海报后能看到几张海报(只看到一部分也算看到)大致思路:就是区间替换更新, 标记一下当前区间的所有的海报是否一致, 用懒惰标记标记一下当前区间的类别听说数据比较水...布吉岛严格的数据下这个代码还能过不= =代码如下:Result  :  Accepted     Memor

2015-08-16 22:49:07 588

原创 POJ 3468 A Simple Problem with Integers (线段树 区间增减 区间求和)

题目大意:中文题面, 就是成段加减, 询问区间和大致思路:练习一下懒惰标记...就是一个简单的懒惰标记向下递推代码如下:Result  :  Accepted     Memory  :  4256 KB     Time  :  1782 ms/* * Author: Gatevin * Created Time: 2015/8/16 19:53:0

2015-08-16 20:36:23 425

原创 HDU 1698 Just a Hook (线段树 成段更新)

题目大意:就是现在一串钩子初始每个部分价值为1, 每次操作修改其中连续的一整段的价值, 问经过Q次操作之后整串钩子的总价值钩子长度N 大致思路:就是用懒惰标记来进行延迟更新, 使得每次更新的复杂度保持在O(logn)的级别, 注意一下懒惰标记的下推即可代码如下:Result  :  Accepted     Memory  :  1684 KB     Ti

2015-08-16 11:04:17 485

原创 POJ 2886 Who Gets the Most Candies? (线段树 约瑟夫环问题变种)

题目大意:就是现在有一些孩子坐成一圈, 每个人手里有一个数字(正数或者负数), 孩子们编号1~n, n那么, 第一次由编号为K的人跳出, 然后根据其手上的数顺时针或者逆时针决定下一个人第p个出去的人能得到p的约数个糖果, 问那个人得到的糖果最多大致思路:就是约瑟夫环的变种, 每次可能顺时针或者逆时针数出下一个人那么用线段树的结点表示对应区间内还剩下的人的个数于是

2015-08-16 01:04:14 480

原创 POJ 2828 Buy Tickets (线段树 单点更新 查询右界)

题目大意:就是告诉N个人依次插队的顺序要求输出最终的序列大致思路:对于整个插入倒着执行, 那么前面的插入不会影响后面插入的人记初始数组为[0, 1, 1, 1, ...., 1]一共n + 1个数下标从0到n那么每次就相当于找出当前前缀和大于p的插入(p, value)然后更新找到的位置的值为0即可查询操作用线段树维护, 单点修改也是代码如下:

2015-08-15 23:27:03 477

原创 Codeforces Gym 100203D Different vectors 想法题 + Hash

题目大意:就是现在给出N个向量, 对于两个向量他们相等的条件是可以通过轮转使得存在正整数之间的双射使得两者相等给出N个向量问不相等的向量有多少个大致思路:首先对于每个向量, 先求出对于每个位置向左边(或者向右边)最近的和它相同的位置到这个位置的距离作为这个位置的新值例如 1 2 2 3向左找的话就是 4 3 1 4, 只要两个向量这么变化之后通过轮转是一样的话就一定恩那

2015-08-15 20:08:51 501

原创 HDU 2795 Billboard (线段树 单点更新, 询问位置)

题目大意:就是h*w的板, 每次向上面空白位置贴1*w的条(不能旋转)问每次贴能找到的最上面的位置大致思路:线段树练习题, 刷刷刷代码如下:Result  :  Accepted     Memory  :  3668 KB     Time  :  3120 ms/* * Author: Gatevin * Created Time: 2015/

2015-08-14 23:10:41 575

原创 HDU 1394 Minimum Inversion Number (线段树 求逆序对)

题目大意:就是求逆序对之后O(1)递推每一种变化对应的逆序对数量的最小值大致思路:....刷代码如下:Result  :  Accepted     Memory  :  1644 KB     Time  :  93 ms/* * Author: Gatevin * Created Time: 2015/8/14 22:01:45 * File N

2015-08-14 22:20:19 471

原创 HDU 1754 I Hate It (线段树 单点替换, 区间最值)

题目大意:中文题面就是可以每次替换一个数, 或者查询区间最大值大致思路:线段树专题速度刷....没什么好说的....练练手..代码如下:Result  :  Accepted     Memory  :  3680 KB     Time  :  1092 ms/* * Author: Gatevin * Created Time: 2015/

2015-08-14 21:55:44 549

原创 HDU 1166 敌兵布阵 (线段树 单点增减, 区间求和)

题目大意:中文题面就是区间中单点增减, 区间求和大致思路:线段树练手题1....还是得系统地学一下线段树才能少一些疑虑代码如下:Result  :  Accepted     Memory  :  2136 KB     Time  :  249 ms/* * Author: Gatevin * Created Time: 2015/8/14 21

2015-08-14 21:42:03 543

原创 Codeforces Gym 100379G Wythoff’s game with three piles 博弈

题目大意:就是现在3堆石子, 每次操作从其中一堆拿走任意数量的石子, 或者从同时3堆中拿走同样数量的石子, 每次操作拿的石子数量至少是1颗两人轮流进行操作拿走最后一颗石子的人胜对于给出的三堆石子的数量a, b, c 大致思路:这个题表示看了半天觉得好像和3堆的Nim博弈没有区别就直接当Nim博弈做了...然后就AC了....不过还是需要证明的为了证明这和Ni

2015-08-14 20:07:08 681

原创 Codeforces Gym 100379I Move the queen to the corner! 威佐夫博弈变形 + 高精度

题目大意:就是现在有一个皇后在棋盘的左上角, 棋盘大小n*m, n , m然后两个人轮流移动皇后, 每次可以向下, 右或者右下斜线方向移动, 移动步数至少一步, 至多不超出棋盘边界..然后谁将这个皇后移动到了右下角谁就输了大致思路:首先如果是到右下角赢的话就是威佐夫博奕的原形了这个地方谁到右下角谁输, 我们不妨记右下角是(0, 0)于是起点是(m - 1, n -

2015-08-14 17:00:11 982

原创 Codeforces Gym 100379J Move the (p, q)-knight to the corner! 组合数学DP, Lucas定理

题目大意:就是现在一个n*m的棋盘上有一个位于顶点的马(1, 1), 现在要从(1, 1)移动到(n, m), 中间有k个位置是不能走的 k 并且每次走的时候必须遵循马走的规则: 从(x , y)走到(x + p, y + q)或者 (x + q, y + p)n, m 大致思路:首先考虑每一个位置(x, y)到达这个位置需要的两种走法的次数分别是t1, t2, 那么

2015-08-14 14:57:03 798

原创 Codeforces 559C Gerald and Giant Chess 组合数学 DP

题目大意:就是现在对于一个H*W的棋盘从点(1, 1)走到(H, W), 每次只能x++或者y++地走, 其中棋盘上有n个点是坏点, 也就是不能走的点, 那么从(1, 1)到(H, W)不经过这n个坏点的路径有多少种, H, W 大致思路:首先在不考虑坏点的情况下, 从(x1, y1)走到(x2, y2), x2 >= x1, y2 >= y1一共有C(x2 - x1 + y2

2015-08-14 13:10:56 1433

原创 Codeforces 559B Equivalent Strings 想法题

题目大意:就是根据题目中给出的定义判断两个串是否相同大致思路:....前来补好久之前每补的题....当时这个题比赛的时候直接递归根据定义用Hash判断的然后TLE了....好吧毕竟不是正解这个题的正确做法是每次将串分成两半按照字典序排序, 这样递归回溯排好之后, 如果两个串根据题目中的定义是相同的话, 那么这样做之后一定会使得两个串相同并且时间复杂度也是严格意义

2015-08-14 12:31:36 756

后缀自动机算法代码 C++

后缀自动机C++实现, 将后缀自动机写成了结构体, 配有详细的注释内容

2015-05-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除