随笔分类 -  HDOJ

上一页 1 2

HDU3397 - Sequence operation(区间更新&&区间合并)
摘要:题目大意 给定一个长度为n的01序列,可以对其进行以下五种操作:1、0 a b 把区间 [a , b]内的所有元素全部变为02、1 a b 把区间 [a , b]内的所有元素全部变为13、2 a b 把区间 [a, b]内的所以元素进行取反操作4、3 a b 查询 区间[a, b]内元素1的总数5、4 a b 查询区间 [a , b]的元素为1的最长连续子序列长度 题解 区间更新和区间合并的综合题... 阅读全文

posted @ 2013-06-03 01:22 仗剑奔走天涯 阅读(313) 评论(0) 推荐(0)

HDU3308–LCIS(单点修改&&区间合并)
摘要:题目大意 给出n个数: 你可以对其进行以下两种操作: U A B: 把第A个数的值替换为BQ A B: 查询在区间[a, b]内的最长连续上升子序列的长度 题解 单点更新和区间合并 需要维护三个域:区间LCIS长度的最值maxl,包含左端点LCIS的长度最大值lmaxl,包含右端点的LCI长度S的最大值rmaxl,合并的时候和hotel差不多,在查询区间的时候要注意,如果最长的长度是跨越了两个自区... 阅读全文

posted @ 2013-06-02 23:43 仗剑奔走天涯 阅读(209) 评论(0) 推荐(0)

HDU4262–Juggler(区间求和&&单点更新)
摘要:题目大意 有一个圆形管道,里面有N个球,给定N个球的出圈顺序,最初的时候手的位置是在第一个球的位置,如果一个球的位置刚好是手所在的位置,那么它可以被取出,要求你按照给定的出圈顺序,依次取出N个球,在旋转到目标小球的时候,可以向左旋转,也可以向右旋转,每移动一个单位位置,需要一个单位的花费,要求你计算出最少的花费是多少 题解 如果读懂题目了,那么就很好做了,当时模拟的比赛的时候看了好久题目都没有看懂... 阅读全文

posted @ 2013-05-22 09:13 仗剑奔走天涯 阅读(220) 评论(0) 推荐(0)

HDU4302 - Holedox Eating(单点修改&&最大值最小值查询)
摘要:题目大意 给定一个长为L的水管,可以进行以下两种操作,小动物初始位置为0: 1、在位置a的水管处添加一个食物 2、让小动物吃掉一个离它最近的食物,如果左右两个方向离它最近的食物的距离相等,则选择与它朝向相同的方向的食物吃掉 题解 操作一就是单点修改,对于操作二,维护一个区间最大值和最小值,然后每次查询小动物左边的最大值和右边的最小值,然后进行选择,有一个坑爹的地方就是如果没有食物吃则呆在原地不动 ... 阅读全文

posted @ 2013-05-17 15:42 仗剑奔走天涯 阅读(267) 评论(0) 推荐(0)

HDU1698 - Just a Hook(成段替换+懒惰标记)
摘要:题目大意 给定一个长度为n的序列A,每个元素值初始全部为1,接下来有m个操作,每次给定操作区间[X,Y]和一个值v,表示把AX,AX+1,…AY的值全部修改为v,完成m次在操作之后要求你求出序列的总和 题解 区间修改的模板题。。。需要用到懒惰标记(搞了好久才弄懂o(╯□╰)o)。。。 代码: #include<iostream>#include<cstdio>#include<cstring>#i... 阅读全文

posted @ 2013-05-13 22:26 仗剑奔走天涯 阅读(191) 评论(0) 推荐(0)

HDU2795–Billboard(单点修改&&区间最值)
摘要:题目大意 给定一个大小为h*w的矩形和n个子矩阵,大小分别为1*w1,1*w2,1*w3,..1*wn。要求你把n个子矩阵按给出顺序依次放置在大矩阵中(如果能够放入的话),使得放置的位置尽量靠顶端,如果有几种情况符合条件的话,选择最靠左的位置放置,要求你输出每个子矩阵放置的位置的行数,如果不能能放置则输出-1 题解 线段树的单点修改和区间最值问题,把每一行作为线段树的一个叶子结点,每个叶子结点的初... 阅读全文

posted @ 2013-05-13 21:17 仗剑奔走天涯 阅读(262) 评论(0) 推荐(0)

HDU1394 - Minimum Inversion Number(单点增减&&区间求和)
摘要:题目大意 给定一个序列a1,a2,a3,..,an-1,an.每次通过把最左端的数转移到序列的最后面得到新的序列,通过n-1次操作,可以得到n-1个新的序列,要求你求出n个序列中逆序数最少的序列的逆序数总数 题解 可以用线段树求出原始序列的逆序数对总数sum来,然后通过通过递推可以求出另外n-1个序列的逆序对总数,用sum减去a[i](0<=i<=n-1)在转移之前右边比它小的数的总数(a[i])... 阅读全文

posted @ 2013-05-06 21:21 仗剑奔走天涯 阅读(219) 评论(0) 推荐(0)

HDU1754 - I Hate It(单点更新&区间查询)
摘要:题目大意 给定一个序列A1,A2,..,An.可以对其进行一下两种操作: 1、query(a,b) 查询区间[a,b]的最大值 2、update(a,b) 把点a的值修改为b 题解 线段树的基础操作,单点更新和区间查询,第一次写线段树!!!激动ing!!!(虽然是照着《训练指南》和shǎ崽大神的代码写的。。。) 代码: #include<iostream>#include<cstring>#inc... 阅读全文

posted @ 2013-05-05 22:07 仗剑奔走天涯 阅读(158) 评论(0) 推荐(0)

HDU3584 - Cube
摘要:题目大意 给定一个体积为N*N*N立方体,每个单位小立方体A[x][y][z]里有一个值,初始值全部为0,我们可以对立方体进行一下两种操作: 1、查询A[x][y][z]的奇偶性 2、对子立方体的每个元素的值进行增减 题解 三维树状数组,就是POJ2155 Matrix的三维推广形式 代码: #include<iostream>#include<cstdio>#include<cstring>#d... 阅读全文

posted @ 2013-04-23 01:45 仗剑奔走天涯 阅读(235) 评论(0) 推荐(0)

HDU3015 - Disharmony Trees
摘要:题目大意 和POJ1990是一样的,只是把max改成min了。。。 给定N对二元组(x1,y1),(x2,y2),(x3,y3)…(xn,yn).每两个二元组之间(假设分别为i和j,i!=j)将会产生一个值ans(i,j)=min(xi,xj)*|yi-yj|,计算出sigma(ans(i,j))(1<=i,j<=n,i!=j) 题解 需要对x,y进行离散,然后把y值按降序排序,之后的做法和POJ... 阅读全文

posted @ 2013-04-23 01:26 仗剑奔走天涯 阅读(243) 评论(0) 推荐(0)

HDU1166 - 敌兵布阵
摘要:题目大意 给定N个数,可以对这些数进行三种操作: 1、Add(i,x),对第i个数增加x 2、Sub(i,x),对第i个数减x 3、Query(x,y) ,查询区间[x,y]的和 题解 赤裸裸的树状数组啊。。。我还二逼得WA了两次,原因是读入字符串的时候用的while(cin>>s),然后就一直不能退出循环了,不知道为啥会这样。。。换成C语言风格的字符串,然后用scanf读入就没问题了。。尼玛坑爹... 阅读全文

posted @ 2013-04-20 00:08 仗剑奔走天涯 阅读(249) 评论(0) 推荐(0)

HDU1556 - Color the ball
摘要:题目大意给定区间[1,N],初始时区间的每个数都是0,对其进行多次操作,每次给出两个数a和b,要求你对在区间[a,b]的数全部加1,在操作结束后输出每个数的值题解最基础的树状数组了,就是修改区间[a,b]的值,询问单个元素的值代码:#include<iostream>#include<cstring>#include<cstdio>#define MAXN 100005using namespace std;int c[MAXN];int n;int lowbit(int x){ return x&-x;}void add(int x,int d){ 阅读全文

posted @ 2013-04-19 20:19 仗剑奔走天涯 阅读(190) 评论(0) 推荐(0)

HDOJ1003 - Max Sum
摘要:题目大意:和1231一样,求最大连续子序列和,只是这个题目是要求求的是最大连续子序列和的首元素位置和尾元素位置。题解:直接把1231的代码稍微修改一下就行了。。。#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 100005typedef struct{ long x,y;} NODE;NODE path[MAXN];long d[MAXN],a[MAXN];int main(void){ long i,n,maxs,l,r,T,p; scanf("%ld" 阅读全文

posted @ 2013-04-03 00:04 仗剑奔走天涯 阅读(196) 评论(0) 推荐(0)

HDOJ1231 - 最大连续子序列
摘要:题目大意:求最大连续子序列和,并输出其序列的首元素和尾元素。题解:方程非常简单:d[i]=max(0,d[j-1])+a[i],主要是最大连续子序列和的首元素和尾元素怎么记录的问题,其实也非常简单,就是在当我们求以位置i为结束位置的最大连续子序列和的时候,顺便记录下以位置i结束的最大连续子序列和的首元素和尾元素,如果序列的长度为1,则尾元素和首元素都是a[i],如果大于1,则首元素为d[i-1]的首元素,尾元素依然是a[i]。#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 1 阅读全文

posted @ 2013-04-02 23:46 仗剑奔走天涯 阅读(153) 评论(0) 推荐(0)

上一页 1 2

导航