![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 82
朽弈
这个作者很懒,什么都没留下…
展开
-
POJ 2431 Expedition(树)
题目链接:http://poj.org/problem?id=2431题目大意:原创 2014-05-21 02:57:16 · 489 阅读 · 0 评论 -
Codeforces 282E. Sausage Maximization【trie树(非指针版)】
题目大意:给出一串数,pre[i](前i个数的异或)为a[0]~a[i-1]的异或,post[i](后缀的异或)为a[i]~a[n-1]的异或,求pre[i]^post[j]的最大值(0做法:利用trie树将后缀或者前缀存储起来,首先从pre[n]开始,往前遍历,对于每个前缀,将此时的后缀添加到trie树中,再在trie中寻找与当前前缀异或之后能得到最大的值。在trie原创 2014-09-08 18:27:59 · 870 阅读 · 0 评论 -
Codefroces 223A - Bracket Sequence【栈优化】
题目大意:有一串只含有 "(" ")" "[" "]" 的序列,问在该序列的 左右括号能分别配对的 所有子串中的含有方括号的个数的最大值,并输出相对应的子串。做法:利用一个栈来维护,每次如果有能与栈顶的元素配对的右边括号时,将该元素弹出,如果此时弹出的元素代表方括号,那么记录此时出现的下标。否则将该元素压进栈。当然我们压进栈的是当前元素的下标。当处理完整个序列之后原创 2014-08-26 15:46:07 · 607 阅读 · 0 评论 -
Codeforces 371D. Vessels【并查集】
题目大意:给出一堆从上到下叠起来的容器,有两种操作:第一种是在编号为i的容器中加入x的水(保证水溢出之后会流到下一个最近的容器(如果存在)中);第二种是查询编号为i的容器中有多少水。做法:首先,想想暴力?但是如果直接暴力,那肯定超时了。每次的加水操作都必须一步步的推向能够容纳从上面溢出的水的容器,这样来十万次操作,一定是T了。那该怎么办呢?我们面对一个在 i 容器中加水的操作,要是能短原创 2014-08-28 19:06:32 · 795 阅读 · 0 评论 -
Codeforces 377B . Preparing for the Contest【优先队列】
题目大意:有m个bug,n个学生,每个bug有自己的复杂值,每个学生有自己的能力值,只能解决复杂值小于自己能力值的bug,且每天只能解决一个bug,但是每个学生处理bug需要报酬,问在报酬不超过s的情况下,在最短的时间内,能将bug全部解决完。做法:首先明确一点,如果能够解决所有bug,那么解决的天数一定在1~m之间。先判断m天能不能解决,如果不能则输出NO,如果可以再进行下面的操作。原创 2014-08-29 02:26:44 · 980 阅读 · 0 评论 -
Codeforces 380C. Sereja and Brackets【线段树】
题目大意:给出一串括号,有m个查询(包含a,b)问区间[a,b]之间有多少个匹配的括号做法:处理两个数组r[i](代表从1到i之间有多少个已匹配的右括号),l[i](代表从1到i之间有多少个没有匹配的左括号)。我们要算[a,b]之间的匹配的括号数,首先用r[b]-r[a-1],但是遮掩更有可能a到b之间的右括号是在[1,a-1]之间被匹配的,那么再减去l[a-1],但是减去的这一部分中原创 2014-08-29 23:36:42 · 909 阅读 · 0 评论 -
Codeforces 383C . Propagating tree【树状数组,dfs】
题目大意:有一棵树,对这个树有两种操作:1:表示为(1 x val),在编号为x的节点上加上val,然后给x节点的每个儿子加上- val,再给每个儿子的儿子加上-(- val),一直加到没有儿子为止。2:表示为(2 x)查询x节点上的值。做法:由于每次修改操作修改的并不是一个值,而是很多值,那我们将该题抽象成区间修改,点查询的问题。那怎么抽象呢?可以明白的是,每次操作虽然有加有减,但是原创 2014-08-31 01:09:28 · 1211 阅读 · 0 评论 -
Codeforces 319B. Psychos in a Line【栈】
题目大意:一串数列,每一个值如果大于相邻右一位的值的话,那么就可以把右边这个值“吃掉”(右一位消失,原来的值不变),问需要吃多少次才能到达无法再吃的状态。做法:利用栈。遍历一遍数组,处理每个值的时候,如果栈顶的元素小于该值,那么将其弹出,知道栈顶元素大于该值或者栈为空,栈内的每个元素记录下一个属性:他是在第几次被“吃掉”,进栈的新元素的被吃次数就是它弹出去的元素中的属性的最大值原创 2014-08-31 14:48:56 · 1390 阅读 · 0 评论 -
Codeforces 463D. Gargari and Permutations【DP】
题目大意:给出1~n的k个排列(2做法:算是不难的DP,dp[i]表示以i为结尾的最长公共子序列的长度,由于每个数在一个排列中只可能出现一次,我们用一个二维数组pos[i][j]表示数字j在第i行出现在第几个位置,再用一个数组cnt[i] 记录i出现了多少次;当第i个数出现了k次之后,说明能够以该数为结尾构成公共子序列,那么dp[i]=max(dp[j]+1),其中i,j满足p原创 2014-08-31 14:52:41 · 860 阅读 · 0 评论 -
Codeforces 85B. Embassy Queue【线段树、贪心】
题目大意:每个人要办理签证都必须到大使馆中办理三种手续,而且这三种手续办的顺序是固定的。给出办理每种手续的窗口有多少个,办理每个手续花费的时间,有多少人会来办理手续,一级每个人会在什么时间来。要求的是所有人分别在大使馆待的最长时间是多少。做法:一种贪心的做法,由于只有三种手续,那么每个人进入办理的时候,保证选办理同种手续的所有窗口中最早等待的那一个窗口(为什么会有等待?因为该窗原创 2014-09-01 14:05:28 · 885 阅读 · 0 评论 -
Codeforces 242E. XOR on Segment【线段树】
题目大意:给出一个序列,有两种操作,一种是计算l到r的和,另一种是让l到r的数全部和x做异或运算。做法:很显然直接暴力是不可能的(但是这题刚刚出来的时候,很多人用暴力水过去了,后来加强的数据吧),又是两种操作,又想到了线段树。。但是这并不简单,异或操作该怎么处理?异或是一种位运算,如果x的第j位是1,那么说明l到r的每个数的第j位都要反转,(0^1=1,1^1=0),如果是0,那么原创 2014-09-02 14:55:48 · 932 阅读 · 0 评论 -
hdu 4819 Mosaic【二维线段树】
题目大意:给出一个矩阵,有一种操作:x,y,l,将(x,y)元素修改为,以(x,y)为中心,尺寸为l*l的矩阵中(min+max)/2。就是一个裸的二维线段树,一维是普通线段树,二维每个区间都有一个线段树。#include #include #include #include #define L(x) (x)<<1#define R(x) ((x)<<1)|1原创 2014-09-30 16:24:40 · 695 阅读 · 0 评论 -
POJ 2828 poj 2828 Buy Tickets 【树状数组,已知前n项和为K,返回n值】
题目链接:http://poj.org/problem?id=2828在一个队列中,一个人想要插队,告诉你每个新来的人会插在i个人后面,求出最后的队列。如果我们用模拟的话,那么时间复杂度肯定是超了;想想,如果我们逆序,那么最后来的人的位置一定是固定的,这样的话,我们将问题转化成逆序扫描给出数据,插在i个人后面这个数据就变成了在这个人前面需要留出多少个空位。如此我们只需要用树状数组记录前n项原创 2014-08-10 00:58:04 · 966 阅读 · 0 评论 -
hdu 4970 Killing Monsters 【树状数组(区间修改,点查询)】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4970题目大意:类似于一类塔防游戏。monster只能在一条长为N的直线上移动,有m个塔,每个塔有自己的防守范围以及在范围内每个点的伤害值;有k个monster,每个monster有自己的HP,以及刚开始出现在直线上的位置。问最后有多少monster能活着。此题就是很裸的区间原创 2014-08-19 23:28:24 · 694 阅读 · 0 评论 -
POJ_1195 Mobile phones 【二维树状数组】
题目链接:http://poj.org/problem?id=1195纯纯的二维树状数组,不解释,只需要注意一点,由于题目中的数组从0开始计算,所以维护的时候需要加1。因为树状数组的下标是不能为1的代码:#include #include #define N 1030using namespace std;int c[N][N];int cas,n,x,y,a,l,b,r,t原创 2014-06-23 22:26:41 · 645 阅读 · 0 评论 -
POJ 2155 Matrix 【二维树状数组】
题目链接:http://poj.org/problem?id=2155题目大意:给出一个N*N的0矩阵,下面给出两种指令:1. 给出的第一个数据为‘C’,再给出四个整形数据,x1,y1,y1,y2,对以(x1,y1)(x2,y2)分别为左上角和右下角坐标的矩阵内的元素进行反转(0变1,1变0) 2. 给出的第一个数据为‘Q’,再给出两个数据,x,y,然后输出此时这个坐标上的元素原创 2014-06-23 20:43:05 · 612 阅读 · 0 评论 -
POJ 1182 食物链【并查集】
题目链接:http://poj.org/problem?id=1182 POJ 1182原创 2014-05-22 23:38:05 · 766 阅读 · 0 评论 -
Codeforces Round #248 (Div. 2) B题 【数据结构:树状数组】
题目链接:http://codeforces.com/contest/433/problem/B题目大意:给n(1 ≤ n ≤ 105)个数据(1 ≤ vi ≤ 109),其中有m(1 ≤ m ≤ 105)个问题,分两种,第一种:给出l,r,让你求出v[l],v[r]之间的所有数据和;第二种:先将原数据升序排序得到vv数组,给出l,r,让你求出vv[l],vv[r]之间的所有数据和;此题如原创 2014-05-24 18:18:34 · 946 阅读 · 3 评论 -
POJ 2442 Sequence【堆】
题目链接:http://poj.org/problem?id=2442题目大意:给出一个m*n的矩阵,从每一行中取出一个数相加,能得到n^m个不同的结果,要求输出其中前n项。建立一个以n元数组为底层数组的堆,在这里,利用stl中的make_heap,pop_heap,push_heap等函数解决。1.将第一组数据输入arr1数组,升序排序。2.将接下来的数据输入到arr2数组中,并原创 2014-06-28 01:01:10 · 1112 阅读 · 1 评论 -
POJ 1470 Closest Common Ancestors【最近公共祖先LCA】
题目链接:http://poj.org/problem?id=1470原创 2014-06-27 20:38:48 · 795 阅读 · 0 评论 -
POJ_2299 Ultra-QuickSort【归并排序】
题目链接:http://poj.org/problem?id=2299题目大意:求出排序过程中的最小交换次数利用归并排序的分治算法解决此题。代码:#include #include #include #define N 500001using namespace std;int a[N];int temp[N];long long ans;void merge(in原创 2014-06-29 00:32:49 · 854 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers 【树状数组】
题目链接:http://poj.org/problem?id=3468题目大意:给出一组数组v[i],有两种操作,一种给出两个数a,b,要求输出v[a]到v[b]之间的和,另一种给出三个数a,b,c,让v[a]到v[b]之间的数全都加上c。完全是树状数组能够实现的功能,但是如果就这样单纯的套用模板,做第二种操作是更新每个值,这样的操作就有可能超时。换一种思路,既然第二种操作是给某区间上原创 2014-06-29 18:22:43 · 920 阅读 · 0 评论 -
hdu 1540 Tunnel Warfare【线段树】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540题目大意:抗日战争时期,各村庄被一条地道连接着(村庄排在一条线上),有三种操作:第一种:某村庄被敌军摧毁;第二种:修复上一个被摧毁的村庄;第三种:查询与该村庄直接或间接链接的村庄有多少个(包括自己);此题用线段树做,每个节点包含该区间从左端开始有多大连续区间ls,从右端原创 2014-08-02 16:09:31 · 578 阅读 · 0 评论 -
POJ 2823 Sliding Window 【单调队列】
题目链接:http://poj.org/problem?id=2823题目大意:给出一组数,一个固定大小的窗口在这个数组上滑动,要求出每次滑动该窗口内的最大值和最小值。这就是典型的单调队列,单调队列的作用就在此。单调队列的队首为区间内的最值,但是整个队列不用保持单调。用两个队列分别处理最大值和最小值,在此说明一下最大值;往队列中添加值num时,从队尾开始扫,直到遇到一个小于num的原创 2014-06-20 15:09:22 · 609 阅读 · 0 评论 -
POJ 1836 Alignment 【最长上升(下降)子序列】
题目链接:http://poj.org/problem?id=1836题目大意:对一排士兵重新排序,使新队列每个兵向左或向右都能看到左端或者右端,也就是使新队列的每个士兵的身高呈三角形分布即可。求出需要让最少多少个士兵能完成。解法:此处借用小优博客的图说明这个问题,对士兵们进行遍历,使每个士兵作为下图的绿色柱子,下一个士兵作为红色柱子,然后每次循环求出绿色士兵之前最长上升子序列,以及红色士原创 2014-06-20 23:38:09 · 668 阅读 · 0 评论 -
HDU 5127 Dogs' Candies【CDQ分治+动态凸包】
HDU 5127 Dogs’ Candies【CDQ分治+动态凸包】题意:一个狗国家的狗国王有一个装糖的盒子,每颗糖有两个属性p,q,分别代表甜度和咸度,每只狗对于甜度和咸度的偏爱度不一样,所以每条狗有两个参数x, y,每颗糖对于特定的狗的美味度等于p*x+q*y。现在有50000个操作,分为三种:将新的糖(p,q)放入盒子中将盒子中存在的糖(p,q)吃掉给出一条狗的参数(x,y),询问当前存原创 2015-08-25 16:22:36 · 3344 阅读 · 4 评论