自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AC_Arthur的专栏

Always challenge miracles!

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

原创 POJ 2886 Who Gets the Most Candies?(树状数组+二分)

对于可以被i整除的数的个数, 我们可以通过枚举每一个数的倍数, 预先处理出来。该题直接模拟就好, 因为每次都一定有一个人出队, 所以要枚举n次 , 对于每次, 要计算具体是哪个人出队, 这个可以用数学推导很快的算出来是当前队列的第几个人, 要找到这个人我们可以用二分+树状数组来优化算法。 复杂度O(n*logn*logn)细节参见代码:#include#include#incl

2015-12-26 10:43:05 934

转载 《完全版线段树》- NotOnlySuccess

转载自:点击打开链接【完全版】线段树很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉得当时的代码风格实在是太丑了,很多线段树的初学者可能就是看着这篇文章来练习的,如果不小心被我培养出了这么糟糕的风格,实在是过意不去,正好过几天又要给集训队讲解线段树,所以决定把这些题目重新写一遍,顺便把近年

2015-12-26 09:28:11 6423 4

原创 POJ 2828 Buy Tickets(树状数组)

题目链接:点击打开链接题意:给n个人依次插队的情况, 要求求出最终的队伍情况。该题可以用树状数组很方便的维护。如果从前向后扫的话, 每次插队都会影响这个人后面的情况, 所以我们可以倒着进行, 那么最后一个人的位置就是最终位置, 对于前面的人的位置, 只受后面人的影响, 所以等价于其最终位置是第pos[i]+1个空位。   那么也就是说要快速的找到第pos[i]+1个空位。   显然,

2015-12-24 20:47:36 864

原创 HDU 2795 Billboard(线段树)

题目链接:点击打开链接题意: 原始序列全为w, 找到最左边的>=a的位置。该题利用线段树递归特点来求其最左边的大于等于a的位置。线段树递归的特点是从祖先结点开始自顶向下递归,访问各个元素的顺序一定是从左到右, 并且在递归之后可以顺便维护区间结点的值。利用这个特点, 我们可以直接查询到>=a的最左边的位置。该元素变成v - a,  然后顺便维护改变了的值。 所以该题就成了维护区间最大

2015-12-24 19:51:23 1418

原创 HDU 1394 Minimum Inversion Number(树状数组||线段树)

题目链接:点击打开链接对于求逆序数的问题, 通常用线段树或者树状数组来维护, 树状数组代码短,好写, 还是尽量写树状数组吧。首先求出原始排列的逆序数,  那么对于每一次操作, 因为都是将当前排列的第一个数拿到最后一个位置, 所以答案就增加了所有比他大的数字个数,减小了所有比他小的数字个数。细节参见代码:#include#include#include#include#inc

2015-12-24 15:50:47 1953

原创 HDU 1754 I Hate It(线段树-区间求最值&&单点修改)

线段树基础题,区间最值,单点修改细节参见代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define Max(a,b) ((a)>(b)?(a):(b))#de

2015-12-24 11:58:59 815

原创 HDU 1166 敌兵布阵(线段树版)

该题之前用树状数组写过, 最近在学习线段树, 用线段树重新写了一遍。在学习一种新的数据结构之前, 最重要的是要理解其结构是什么样子的, 这个可以参照《算法竞赛入门经典》P199页。 比较重要的是理解好几个变量:1. 每个结点有一个编号。   这个编号对应了其所统治的区间, 我们从线段树的祖先结点开始从上到下, 从左到右的顺序给所有结点编号,这样, 编号为i的结点其左右结点的编号就是2i

2015-12-24 10:57:46 1152

原创 HDU 5493 Queue(二分+树状数组)

题目链接: 点击打开链接题意:有n个人排队,每个人都有一个独一无二的身高,告诉你每个人的身高和他前面或者后面的比他高的人的个数(到底是前是后是未知的)。  要求你还原原来的队列,并且字典序最小。思路: 因为要求字典序最小, 我们可以先按照身高从小到大排序,假设当前到了第i高的人, 他前面或者后面有k个人, 那么他前面的所有人都比他矮, 比他高的还有n-i个人,那么假设他前面还有p个空位,

2015-12-23 22:39:29 1497

原创 HDU 3450 Counting Sequences(DP + 树状数组)

题目链接:点击打开链接题目大意: 统计满足相邻两个数之差不超过d的子序列个数。我们不难想到一个O(n^2)的DP算法 : 对于每一个i, d[i]表示 以i结尾的子序列个数。  那么它将转移到所有满足(j >= 1 && j 但是由于n太大了, 这样显然会超时, 那么我们来想想如何优化这个算法:  可以发现,  对于每个d[i], 其累加的部分是一个(a[i] - d, a[i] +

2015-12-22 20:36:58 1032

原创 FZU 2159 WuYou(贪心)

该题算是比较简单的贪心了, 只要理顺思路, 不是很复杂的。我们可以按照这样的规则进行:从前向后扫一遍, 将?和a[i] == b[i]的情况忽略,  当第一次出现a[i] != b[i]的时候, 分情况讨论如下:1. 如果a[i] 2.如果a[i] > b[i]   , 如果a[i]前面没有? 那么显然是输出-1, 如果a[i]前面有?, 那么从i向前扫, 将?变成b[i]-1,

2015-12-22 10:10:35 862

原创 Codeforces Round #299 (Div. 1) A. Tavas and Karafs(二分)

该题数据量很大, 需要用二分加速算法。题意比较难懂:   给你一个无穷项等差序列, 有n个查询,  对于每个查询, 有三个数 l, t, m, 每次从第l个数之后的数种选择最多m个数使得他们的值减一, 经过最多t次, 求一个最大的r, 使得从l到r所有数都减为0。显然这是一个递增序列, 那么我们直接二分答案就行了 。 如果满足这段序列求和 另外还学到了一个二分上界的好姿势。细节参见

2015-12-21 10:40:51 792

原创 HDU 5207 Greatest Greatest Common Divisor(暴力)

和很多题目的思路是一样的, 因为如果直接二重循环枚举的话时间复杂度是承受不了的, 所以我们不妨换个思路, 先预处理出来没个数出现的次数, 然后从1枚举到最大值i, 对于每个i , 我们找它的倍数, 那么它的倍数肯定以它为最大公约数(因为是从大到小枚举的), 如果超过两个, 则存在以i为最大公约数的两个数, 那么这个i也就是最大的。细节参见代码:#include#include#incl

2015-12-21 09:14:49 783

原创 HDU 5596 GTW likes gt(multiset)

该题其实只需要利用multiset维护一下就可以了。根据题意,  利用题目特点, 可以发现, 如果正着枚举的话, 前面的对后面的会产生影响,  但是, 如果我们倒着枚举就可以避免这个情况。所以我们不妨先记录每个时间点释放魔法的次数, 然后倒着枚举,  这样当前这个数的能力值就是v+res   (res为当前附加的魔法值, 因为后面时间增加的魔法,对于前面时间也一定增加了)。    所以,

2015-12-13 11:30:42 820

原创 HDU 5212 Code(容斥)

题意: 输入n个数, 求这n个数的n^2个两两组合的最大公约数x,x(x-1)之和 。换个思路, 我们如果求出了最大公约数为x的对数cnt, 那么答案就增加x(x-1)cnt^2那么怎么求以x为最大公约数的对数呢?我们枚举x的整数倍, 这样就可以知道这些数中是x的整数倍的数有多少个。

2015-12-12 15:09:34 809

原创 Codeforces Round #320 (Div. 1) C. Weakness and Poorness(三分)

对这个数列中的每一个数减去一个相同的数字, 其最大连续和会呈现出单峰函数的现象, x过大或者过小都不行, 那么处理方法显然是三分。由于该题不是直接三分的答案, 因此三分出的x虽然精度在答案范围内, 但是求出的最大连续和却不一定满足精度。二分或三分浮点数时, 最稳妥的方法是根据数据范围自己设置二分或三分的次数, 这样使得精度可以最大化的精确。细节参见代码:#include#incl

2015-12-07 20:17:44 842

原创 HDU 5592 ZYB's Premutation(二分+树状数组)

昨晚有事没打BC,今天补一补, 这是昨晚第三题,对于一个1~n的序列, 告诉我们每个数前面有多少个比他大的数, 要求我们还原序列。不难发现, 如果我们倒着看的话, 假设当前第i个数是ans[i], 它前面有a[i]个比他大的数, 那么他就是删除后面已经求出的数字后的数组中第a[i]+1大的数。不难想到,将原序列的数当作树状数组的下标, 值为1, 这样就能利用bit快速求出比当前数大的数字还

2015-12-06 13:25:40 1357 4

原创 HDU 5591 ZYB's Game(博弈)

该题是昨晚的BC第二题, 一道挺简单的博弈题。对于博弈题, 关键是要找出必败态或者必胜态。 不难发现, 当所选择的数字是当前数组的中间数字时, 无论怎么选, 对手都能恢复到这个局面,那么当前选手必败。所以所选择的数字不是原数组的中间数字, 那么先手必胜。细节参见代码:#include#include#include#include#include#include#inc

2015-12-06 10:47:29 819

原创 2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest F. Gourmet and Banquet(贪心+二分)

该题是一道比较典型的贪心+二分,  题目中已经加深提示了吃每个菜的时间要一样, 那么这个时间到底是多少呢?   我们很自然的想到了要用二分来加速算法。所以主体框架就是二分这个吃每道菜的时间, 然后问题的关键是如何判断到底能不能满足要求。 处理区间问题, 我们可以采取贪心的思想,为了给后续的菜留出尽量多的空间,我们可以按照区间右端点从小到大排序, 但是区间覆盖情况很复杂,所以我们不妨牺牲一些时间

2015-12-05 20:33:48 961

原创 HDU 3085 Nightmare Ⅱ(双向BFS)

经典的双向BFS, 可以使得世间复杂度大大降低。因为男生和女生每秒走的步数不一样,所以我们可以利用BFS的特点,以每一层作为一个单位来BFS细节参见代码:#include#include#include#include#include#include#include#include#include#include#include#include#include

2015-12-02 21:29:45 851

空空如也

空空如也

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

TA关注的人

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