自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

kalilili的专栏

岁月如歌

  • 博客(66)
  • 收藏
  • 关注

转载 线段树总结

这是某位大牛刷的线段树题目,类型分的很明确:出处http://blog.csdn.net/shiqi_614/article/details/8228102之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnlySuccess的博文“完全版线段树”里的大部分题目,其博文地址Here,然后也加入了自己做过的一些题目。整理时,更新了之前的代码风格,不过旧的代码仍然保

2015-02-16 10:46:18 1301 2

原创 POJ 2418 Hardwood Species(trie的串排序运用)

题意:输入众多字符串(中间有空格),按字典序输出,且输出每个字符串所占整个字符串数量的百分比思路:用字典树的先序遍历,遍历到字符串的末尾便输出并算出百分比即可这题同样用C++stl map 可以很好解决,但毕竟题目是字典序,比如逆序就字典树同样可以解决//1632K 782MS#include#include#include#includeusing namespace st

2015-02-27 23:16:34 570

原创 POJ 1251 统计难题(初学字典树)

今天就这题照着别人的代码学了字典树...这篇论文:http://wenku.baidu.com/view/d2ba836fb84ae45c3b358ca8.html介绍了各种字典树的运用,长了好多姿势,很有启发性归纳一下字典树的应用:检索(主要功能)串排序在DP中减少无效的状态转移最长公共前缀问题(LCP)转化成LCAtire+KMP 构成AC自动机数据结构

2015-02-27 21:49:39 676

原创 POJ 3150 Cellular Automaton(矩阵快速幂+特殊矩阵的性质)

题目的意思开始没看懂,看了别人的博客的翻译题目大意:一个元胞中包含若干细胞,每个细胞都有初始value值,题目定义了一个细胞距离,细胞i、j之间的距离d=min(|i-j|,n-|i-j|),称与细胞i距离不超过d的所有细胞(包括该细胞本身)的集合为细胞i的d-environment,经过一个d-steps变换后,元胞中每一个细胞的值变为该细胞d-environment内所有细胞val

2015-02-27 15:35:22 791

原创 HDU 2157 How many ways??(经典矩阵快速幂)

题意:求A经过K个点到B方案数方法一:1个0 1 的矩阵 Aa[i][j] = 1 表示i 到 j可达 或者说 i 到 j 有1条路 或者说i到j经过一个点的方案数 路可以重复走 而A2 = A* Aa[i][j] 的含义是从i到j经过2个点的方案数A的k次方 A[i,j]代表 i到j走k步的方案有a[i][j]矩阵乘法的定义居然和这个模型如此契合,佩服,所

2015-02-27 15:20:11 743

原创 POJ 3070 Fibonacci (初学矩阵快速幂)

按往常一样,记下一些好的资料:http://www.matrix67.com/blog/archives/276 这是矩阵乘法10个经典的题目,其中最后一题的最后一段在该文的评论中给出。矩阵乘法满足结合律保证了矩阵快速幂的正确性。目前的代码风格是学了九野的模版风格(http://blog.csdn.net/acmmmm/article/details/10041141)#d

2015-02-27 12:41:52 1047

原创 POJ 3613Cow Relays( floyd 倍增法)

题意:从s点出发到达e点且n条边的最短路是多少(可以走重复的路径)图中点思路:folyd可以实现向路径中添边,但是这题与普通的求最短路问题不一样,比如从S到E经过X条边后就已经达到了最短路,这个时候仍然要强制用folyd再添边,尽管添边后就不是最短路了,但是要注意到添加的这边要使最短路损失最小,抓住这点用folyd可以实现强制添边的操作,所以可以从n=1的状态向n的状态转移

2015-02-26 15:17:00 2329 1

原创 HDU 2852 KiKi's K-Number(动态过程求第K小数)

题意:给出三种操作,0 在容器中插入一个数。1 在容器中删除一个数。2 求出容器中大于a的第k大元素。思路:可以用树状数组和线段树,显然a[1]+...+a[i]随i有明显的单调性,所以可以二分出答案线段树时间复杂度比树状数组的常数大了几倍...所以线段树擦边过了还有另外一种思路:二分只是二分出a[1]+...+a[i]的上界i,所以可以逆向考虑,从a[1]开始累加

2015-02-25 21:26:56 524

原创 POJ 3321 Apple Tree( 树状数组)

题目大意:给你一颗苹果树,树的主干设为1,每一个分支设为一个数,一直到N,代表这颗苹果树。每个分支上面只能最多有一个苹果,也就是一个枝子上面不可能有两个苹果。输入是叉之间的关系(数据是根结点向叶结点的方向)1 21 3就是主干上面两个叉分别是2 和3.下面是两种操作,Q 和CC   j  的意思是如果 j 这个枝子上面有苹果就摘下来,如果没有,那么就会长出新的一个

2015-02-24 20:44:58 551

原创 POJ2155 Matrix (树状数组模式二)

大致题意:给出矩阵左上角和右下角坐标,矩阵里的元素 1变0 ,0 变1,然后给出询问,问某个点是多少.每次变化操作相当于把区间上的值全加一,然后对查询的结果模二即可这是树状数组第二种模式的应用:   Up()表示修改区间,Down()表示求单点的值。           Down()表示修改区间,Up()表示求单点的值。 http://www.topcoder.co

2015-02-24 12:00:43 598

原创 HOJ 2275 Number sequence(树状数组)

题意:给定一个n个元素的数列,令Ai, Aj, Ak,使得 Ai Ak 且 i 思路:可以用树状数组,每次输入一个Ai,可以查询到之前输入的比它小或比它大的有多少组,之后输入的就不得而知了,所以可以开个数组记录下来逆序再建树一次即可另外数的范围取到了0,所以每个数要自加一次,而且组数是longlong的,而且HOJ的服务器系统支持的是lld,不是i64d..wa了几次#inclu

2015-02-23 10:45:54 1183

原创 POJ 1195 Mobile phones (二维树状数组)

题意:在一个S*S的正方形内,有两种操作 1 X Y A 是在(X,Y)这个点加A2 X1 Y1 X2 Y2  查询(X1,X2) 到 (Y1,Y2) 这个矩形范围内手机的数量而且数据的边界也是从0开始用树状数组的时候要加一处理对于求矩形面积用一个大的矩形剪去三个边界的小矩形即可ans=query(x2,y2)-query(x2,y1-1)-query(x1-1,y2)

2015-02-22 21:16:07 634

原创 POJ 2299 Ultra-QuickSort (初学树状数组)

多种方法用求逆序对数

2015-02-22 19:36:11 682

原创 POJ 2352 Stars(树状数组 or 线段树)

链接:http://poj.org/problem?id=2352题目大意:在坐标上有n个星星,如果某个星星坐标为(x, y), 它的左下位置为:(x0,y0),x0按照y递增,如果y相同则x递增的顺序给出n个星星,求出所有level水平的数量。思路:由于输入的顺序,对于第i颗星星,它的等级是之前输入的星星中,横坐标x小于等于i星横坐

2015-02-21 23:08:05 774

原创 HDU 3308 LCIS(最长连续上升子序列)(线段树区间合并)

题意:给你n个整数,有两种操作,U A B把第A个数变成B,Q A B查询区间[A,B]的最长连续上升序列。思路:还是查询和更新操作,而且也是询问区间中满足条件的连续最长区间 ,所以是线段树区间合并类型的题,通法是开三棵线段树,一个记录此区间内的LCIS的最长长度,一个记录从左边第一个数开始的LCIS长度,另一个记录从右边最后一个数结尾的LCIS长度。然后试图找到父亲与儿子关系维护的递推关系式

2015-02-21 18:34:28 787

原创 HDU 3613 Best Reward(求前后缀回文 拓展KMP or Manacher)

题目大意:给个字符串X,要把X分成两段T1,T2,每个字母都有一个对应的价值,如果T1,T2是回文串(从左往右或者从右往左读,都一样),那么他们就会有一个价值,这个价值是这个串的所有字母价值之和,如果不是回文串,那么这串价值就为0。问最多能获得多少价值?思路:把字符串X逆序后得到字符串Y让X去匹配Y ,匹配的长度满足extend[i] + i == len,  le

2015-02-21 15:46:40 1771

原创 HDU 3294 Girls' research (Manacher算法 + 记录区间)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3294题目大意:输入一个字符ch和一个字符串,问如果把ch当作'a'的话,字符串的每个字符也要做相应变化,如b aa,若b为'a',则b前面的a就为'a'前面的'z',这里是循环表示,输出字符串的最长回文子串,如果最长回文子串串长为1,输出No solution!几乎是模板题,唯一的特别之处

2015-02-20 21:45:51 726

原创 HDU 3068 最长回文(初遇manacher)

这题可用拓展KMP分治法来做http://blog.sina.cn/dpool/blog/s/blog_677a3eb30100knj8.html 复杂度O(nlogn)这种方法好复杂而且代码很长,不易理解。相比之下Manacher就简单多了,算法本身也很简单 这里个易懂的资料http://wenku.baidu.com/view/3031d2d3360cba1aa811da42.html

2015-02-20 20:20:50 634

原创 HDU 4300 Clairewd’s message(初遇拓展KMP)

昨晚一不小心学了拓展KMP,被虐了一晚,最终是这份资料救了我...http://wenku.baidu.com/view/8e9ebefb0242a8956bece4b3.html说得简单易懂。然后学了kuangbin的模版:/* * 扩展KMP算法 *///next[i]:x[i...m-1]与x[0...m-1]的最长公共前缀//extend[i]:y[i...n-1]与x

2015-02-20 14:48:23 690

原创 Codeforces #291 (Div. 2) D. R2D2 and Droid Army(RMQ+二分)

题意:有n*m的矩阵,然后你有k发子弹。现在你可以朝着任意列发射子弹,每一发子弹都会使该列上的数值-1,最小减少到0。现在问你连续最长的行数,在k发子弹内,使得这些行上的数值全部为0.思路:简单的二分枚举最长行数区间,每个区间的最大值决定了要发射的子弹数,所以是RMQ问题,当然这里的枚举全部枚举,用尺取法也可以。//889 ms#include#incl

2015-02-19 16:15:32 908

原创 POJ 2528 Mayor's posters (hash+线段树成段更新)

题意:有一面墙,被等分为1QW份,一份的宽度为一个单位宽度。现在往墙上贴N张海报,每张海报的宽度是任意的,但是必定是单位宽度的整数倍,且思路:简单的成段更新,但是数据量是1千万,会MT,所以要区间压缩(离散化),保证覆盖的关系不变,离散化的时候有个易错的细节,poj数据水了,这个易错点引用hh牛的话:而这题的难点在于每个数字其实表示的是一个单位长度(并非一个点),这样普通的离散化会造成许多

2015-02-19 16:03:47 656

原创 POJ 3667 Hotel (初遇线段树区间合并)

题意:有一个线段,从1到n,下面m个操作,操作分两个类型,以1开头的是查询操作,以2开头的是更新操作1 w 表示在总区间内查询一个长度为w的可用区间并且要最靠左,能找到的话返回这个区间的左端点并占用了这个区间,找不到返回0 2 a len , 表示从单位a开始,清除一段长度为len的区间(将其变为可用,不被占用),不需要输出。思路:这是第一次遇到线段树区间合并的题目,写下感

2015-02-19 00:10:17 856

原创 Codeforces Round #292 (Div. 2) C. Drazil and Factorial(贪心YY)

题目链接:http://codeforces.com/contest/515/problem/C题意:定义了f(a)是正整数a中每一位数字的阶乘之和,求没有1,0数字且最大的b使得f(b)=f(a)思路:可以用数组记录f(a)有哪些因数,而且让b最大,所以可以把非素数的因数分成素数因数,然后从高位到低位输出,有些细节还是要注意。//Accepted 31 ms 4 KB #incl

2015-02-18 11:10:24 655

原创 HDU 4313 Matrix (贪心+并查集)

题意:给你一个有n(2思路:正着思考的确不好入手,反着思考,让机器人不能互达,所以独立成一个集合,可以用并查集,然后模拟加边,若加上的边让机器人互连那么就删去这条边,可见,让删去的边越短越好,所以尽可能先添加长边。//2776 KB 218 ms#include#include#include#includeusing namespace std;struct node{

2015-02-17 23:52:35 585

原创 poj3468 A Simple Problem with Integers(线段树成段更新)

题意:给定一串数字,进行两种固定操作:一,求某区间内的和;二对某区间内的所以数加上一指定数字。水题//4824 KB 2563 ms#include#include#include#include#define ll long long#define M 100005#define root 1,n,1#define lson l,m,rt<<1#define rson

2015-02-17 23:41:27 539

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

题意很简单:1-n个钩子初始价值是1,然后题目给出Q个操作,x y z,将x->y的钩子价值改为z,最后输出n个钩子的总价值。线段树功能:update:成段替换 (由于只query一次总区间,所以可以直接输出1结点的信息)//3160 KB 624 ms#include#include#include#include#define M 100005#define roo

2015-02-17 23:37:39 661

原创 HDU1394-Minimum Inversion Number(线段树单点更新)

题意:给你一段序列a1,a2,a3,a4,a5,a6,a7,,然后这段序列可以一直调动第一个数字到最后,例如:a2,a3,a4,a5,a6,a7,a1,…………直到循环了一遍。然后从这么多的序列中求出逆序列最小的一组。每次循环的时候都可以递归求解逆序对数:设原序列逆序数为sum, 当把原序列第一个移动到最后位置时,逆序数变为:sum = sum-(ai-1)+(n-ai);

2015-02-17 23:21:03 508

原创 HDU1754 I Hate It(线段树单点更新)

Problem Description很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。线段树功能:update:单点替换 query:区间最值//3172 KB

2015-02-17 23:14:32 567

原创 hdu1166 敌兵布阵(线段树单点更新)

题意  n个阵营一字排开,每个初始有a[i]个人。现有两种操作:  Q a b 查询[a,b]之间总人数并输出  A/S a b 在a号位添加/删除b个人线段树功能:update:单点增减 query:区间求和//1676 KB 312 ms#include#include#include#include#define maxn 5

2015-02-17 23:10:35 438

原创 UVa 116 - Unidirectional TSP(单向TSP)

题目:给你一个n*m的数字表格,找到一条从左到右的路径,使得上面的数字和最小。输出字典序最小的行号路径           (每次可以从(i,j),走到(i,j+1),(i+1,j),(i-1,j)循环无限延伸没有边界)思路:由于要输出字典序最小的路径,所以要逆向dp,边界在n列从右到左dp说明:逆向dp保证字典序最小(后继最小),正向能保证每点前驱最小。//0

2015-02-17 22:58:40 922

原创 UVA 437 The Tower of Babylon (DAG上的无源最长路 or LIS)

题目大意有n种长宽高为x,y,z的砖头,每种都有无数个。砖头可以用不同姿势的方向来盖。砖头a以某种姿势可以盖在砖头b上,当且仅当a的底部的长宽都要比b的底部长宽要小。问最高可以建多高?思路:按图论的最长路dp也可,用 LIS也可以也就相当于把DAG拓扑排序了一下//0 KB 19 ms#include#include#include#in

2015-02-17 22:41:38 775

原创 UVA 1025 A Spy in the Metro (DP)

题意:有线性的n个车站,从左到右编号分别为1~n。有M1辆车从第一站开始向右开,有M2辆车从第二站开始向左开。在0时刻主人公从第1站出发,要在T时刻回见车站n 的一个间谍(忽略主人公的换乘时间)。输出最少的等待时间,如果无解输出impossible。思路:“时间单向流逝,是天然的序,影响的决策的只有当前的时间和地点”这是lrj的第一句话,真6,已经引出了解法和阶段决策

2015-02-17 22:34:46 549

原创 UVA 12563 Jin Ge Jin Qu hao(01背包变形:两个背包内容)

题意:       KTV里面有n首歌曲你可以选择,每首歌曲的时长都给出了. 对于每首歌曲,你最多只能唱1遍. 现在给你一个时间限制t (ttime必须) ? 最终输出num+1 和 time+678 即可.       注意: 你需要优先让歌曲数目最大的情况下,再去选择总时长最长的.//0 KB 39 ms#include#include#include#in

2015-02-17 22:24:15 957

原创 uva 1347 - Tour(双调欧几里得)

题目大意:给出n个点,确定一条 连接各点的最短闭合旅程的问题。解题思路:dp[i][j]表示说从i联通到1,再从1联通到j的距离。dp[i][j] = dp[i-1][j] + dis(i,i-1);dp[i][i-1] = min (dp[i][i-1], dp[i-1][j] + dis(i, j));记忆化代码://0 KB 58 ms#includ

2015-02-17 22:18:08 576

原创 UVa 11400 Lighting System Design(DP)

题意  :设计某个地方的照明系统  一共需要n种不同类型的灯泡  接着输入 每种灯泡的电压v  对应电压电源的价格k  每个灯泡的价格c   需要这种灯泡的数量l   电压低的灯泡可以用电压高的灯泡替换   每种灯泡只需要一个对应的电源   求完成这个照明系统的最少花费dp,多阶段决策,把电压一排序,小的可以换成大的,对于每个阶段i,都有i种决策,两个dp方向均可//0 KB 145 ms

2015-02-17 22:00:19 446

原创 hdu2795 Billboard(线段树单点更新)

题意:有一块h*w的墙,有N个宣传单 每个的大小为 1*wi 每次贴都从最左最上能贴的位置开始。求每一宣传单被贴在哪一行。思路:线段树,以1~h划分区间,每一个区间中保存该区间能放下的最大长度,每次从最上面开始找,找到符合的位置 贴上,该位置减去len,更新区间的最大长度值。询问和更新一起操作//3152 KB 1903 ms#include#include#include#i

2015-02-17 21:56:58 503

原创 HDU1867:A + B for you again(KMP)

题意:找出一个最大的公共子串,这个子串是一个字符串的尾串(tail substring ),同时是另外那个字符串的头串(head substring),是满足A+B的长度strlen(A+B)达到最小值,这里面要注意的一个问题是,谁做模式串P是不一定的,所以要分别比较不同字符串作为模式的KMP值。思路:让两个串分别做模式串。看谁KMP的结束的时候匹配的字符字符的个数最多就好。当然也可以把两

2015-02-17 21:38:11 639

原创 POJ 2185 Milking Grid (KMP) (好题)

题意:给你一个字符矩阵,求出它的最小覆盖子矩阵,即使得这个子矩阵的无限复制扩张之后的矩阵,能包含原来的矩阵。 即二维的最小覆盖子串。和HDOJ1358 Period 一样,对于(1....x)串x-next[x]就是它自身的最小覆盖串,所以可以把每行的所有覆盖求出来,找到他们的最小值,即是最小覆盖子矩阵的宽,一些博客把每行的所有最小覆盖的公倍数求了出来,这样的确可以覆盖整个矩阵但不是最小覆

2015-02-17 21:33:28 918

原创 POJ3080-Blue Jeans(KMP,水)

大致题意:就是求k个长度为60的字符串的最长连续公共子串,2规定:1、  最长公共串长度小于3不输出2、  若出现等长的最长的子串,则输出字典序最小的串思路:和POJ-3450-Corporate Identity一样二分+枚举,但是直接暴力也0ms//192 KB 0 ms 题目太水,我就把POJ3450的代码改了几句话#includ

2015-02-17 21:17:45 935

原创 POJ-3450-Corporate Identity(KMP)

题意:给你n个的串,求出它们的最长公共子串,如果不存在这个子串,则输出“IDENTITY LOST”,如果存在多个最长公共子串,则输出字典序最小的那一个。思路:二分枚举最长公共子串的长度,然后再枚举此长度的所有子串,找出字典序最小的解(不用二分直接暴力也能过)//400 KB 125 ms #include#include#include#includeusing namespace

2015-02-17 21:12:43 1141

空空如也

空空如也

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

TA关注的人

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