------------数据结构------------
yphacker
心之所动,且就随缘去吧
展开
-
HDU5147 Sequence II && BestCoder Round #23 1002
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5147解题思路:BestCoder官方题解:要统计四元组的数量我们可以通过枚举c,然后统计区间[1,c-1]有多少二元组(a,b)满足ab且AaAb,以及统计出区间[c+1,n]有多少d满足AcAd,根据乘法原理,把这两项乘起来就可以统计到答案里了.然后我们来处理子问题:区间[1,原创 2014-12-27 14:46:41 · 401 阅读 · 0 评论 -
HYSBZ 1858(Scoi2010) 序列操作(线段树+区间合并)
序列操作Descriptionlxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[a,b]区间内的所有数全部取反,也就是说把所有的0变成1,把所有的1变成0 3 a b 询问[a, b原创 2016-03-24 11:02:40 · 320 阅读 · 0 评论 -
HYSBZ 1798(Ahoi2009) Seq 维护序列seq(区间更新+加法乘法混合操作)
Seq 维护序列seqDescription老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成。 有长为N的数列,不妨设为a1,a2,…,aN 。有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一段数全部加一个值; (3)询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模P的值。Input第一行两个原创 2016-03-24 10:57:44 · 482 阅读 · 0 评论 -
HYSBZ 1012(JSOI 2008) 最大数maxnumber(线段树点更新)
最大数maxnumberDescription现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。 2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得原创 2016-03-24 10:51:15 · 353 阅读 · 0 评论 -
hdu 3974 Assign the task(线段树+将树映射到区间)
Assign the task题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3974解题思路:题目大意:一家公司有n个人,编号1~n,每个人都有一个直属上司。 给你两种操作: 1:给x分配任务y,此时,x会将y也分配给他的下属,下属再分配给下属……也就是x下面的人都会放下原先的任务(如果有)而去做任务y。2:询原创 2016-03-23 20:49:39 · 731 阅读 · 0 评论 -
hdu 1540 Tunnel Warfare(线段树单点更新+区间合并)
Tunnel Warfare题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540解题思路:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少。用线段树来记录。然后用三个变量分别代表左边连续区间,右边连续区间和最大连续区间。AC代码:#include #include #i原创 2016-03-23 19:51:23 · 279 阅读 · 0 评论 -
UVA 12299 RMQ with Shifts(线段树+点更新)
RMQ with ShiftsDescriptionIn the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query (L, R) (LIn this problem, the array A is no longer static:原创 2016-04-01 08:47:45 · 711 阅读 · 0 评论 -
SPOJ GSS5 Can you answer these queries V(区间合并)
Can you answer these queries VDescriptionYou are given a sequence A[1], A[2], ..., A[N] . ( |A[i]| <= 10000 , 1 <= N <= 10000 ). A query is defined as follows: Query(x1,y1,x2,y2) = Max {原创 2016-03-31 22:48:12 · 562 阅读 · 0 评论 -
SPOJ GSS1 Can you answer these queries I(区间合并)
Can you answer these queries IDescriptionYou are given a sequence A[1], A[2], ..., A[N] . ( |A[i]| ≤ 15007 , 1 ≤ N ≤ 50000 ). A query is defined as follows: Query(x,y) = Max { a[i]+a[i原创 2016-03-31 17:44:01 · 667 阅读 · 0 评论 -
POJ 2452 Sticks Problem(RMQ+二分)
Sticks Problem题目链接:http://poj.org/problem?id=2452解题思路:题目大意:给你一组数a[n],求满足a[i] 算法思想:RMQ + 二分。 枚举i,利用二分求出a[i]右边第一个小于a[i]的数的位置k, 再求出[i, k]中最大值的位置j,若a[j] > a[i],则更新结果。 AC代码:#inclu原创 2016-03-24 22:44:05 · 372 阅读 · 0 评论 -
UVALive 4108 SKYLINE(线段树区间修改)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2109解题思路:题目大意:我们要在地平线(看成数轴)上依次建造n座建筑物。建筑物的修建按照从后往前的顺序,因此新建筑物可能会挡住一部分老建筑物。修建完一座建筑原创 2015-08-24 21:20:46 · 679 阅读 · 0 评论 -
POJ 1990 MooFest(二维树状数组)
题目链接:http://poj.org/problem?id=1990解题思路:题目大意: Farmer John有n头牛,排列成一条直线(不会在同一个点),给出每头牛在直线上的坐标x。另外,每头牛还有一个自己的声调v,如果两头牛(i和j)之间想要沟通的话,它们必须用同个音调max(v[i],v[j]),沟通起来消耗的能量为:max(v[i],v[j]) * 它们原创 2015-08-27 20:24:11 · 441 阅读 · 0 评论 -
hdu 2795 Billboard(线段树)
Billboard题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795解题思路:题目大意: 有一块h*w的矩形广告板,要往上面贴广告; 然后给n个1*wi的广告,要求把广告贴上去; 而且要求广告要尽量往上贴并且尽量靠左; 求第n个广告的所在的位置,不能贴则为-1。算法思想:利用线段树可以求区间的最大值,将位置即h用来...原创 2015-08-23 20:53:16 · 578 阅读 · 1 评论 -
poj 3468 A Simple Problem with Integers(线段树区间修改)
题目链接:解题思路:AC代码:#include #include using namespace std;typedef long long ll;const int N = 100005;struct node{ int l,r; ll sum; ll add;}tree[N<<2];ll a[N];ll ans;void原创 2015-08-21 13:10:28 · 506 阅读 · 0 评论 -
hdu 1754 I Hate It(线段树点修改)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754解题思路:线段树点修改,区间最大值。。。AC代码:#include #include #include using namespace std;const int N = 200005;int n,m;int a[N];struct node{ in原创 2015-08-18 22:50:47 · 337 阅读 · 0 评论 -
POJ 2299 Ultra-QuickSort(求逆序数)
题目链接:http://poj.org/problem?id=2299解题思路:树状数组实际上就是一个数组,只不过它的每个元素保存了跟原来数组的一些元素相关的结合值。若A为原数组,定义数组C为树状数组。C数组中元素C[ i ]表示A[ i –lowbit( i ) + 1]至A[ i ]的结合值。lowbit(i)是i的二进制中最后一个不为零的位数的2次方,可以这样原创 2015-08-19 12:37:50 · 336 阅读 · 0 评论 -
hihoCoder 1062 最近公共祖先·一
#include #include #include #include #include using namespace std;int main(){ int N,M,id=0; scanf("%d",&N); vector fa,son,names; map m; for(int i = 0; i < N; i++) { string str1,str2;//st原创 2015-08-02 10:56:28 · 414 阅读 · 0 评论 -
hihoCoder 1080 更为复杂的买卖房屋姿势(区间更新)
#include #include using namespace std;const int N = 100005;struct node{ int l,r,sum; int add,setv;}tree[N<<2];int a[N];int ans;void build(int id,int l,int r){ tree[id].l = l;原创 2015-08-02 22:09:37 · 541 阅读 · 0 评论 -
SPOJ GSS3 Can you answer these queries III(线段树)
Can you answer these queries IIIDescriptionYou are given a sequence A of N (N modify the i-th element in the sequence or for given x y print max{Ai + Ai+1 + .. + Aj | xInputThe first原创 2016-03-27 12:43:29 · 370 阅读 · 0 评论 -
hdu 2852 KiKi's K-Number(树状数组)
KiKi's K-Number题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2852解题思路:给你三种操作: 0 x:向容器里加入x; 1 x: 在容器内删除x,不存在x则输出“No Elment” 2 x y:在容器中找到大于x的第y个数,没有则输出“Not Find” 算法思想:树状数组。 操作1:直接add(原创 2016-03-31 17:15:48 · 401 阅读 · 0 评论 -
hdu 1892 See you~(二维树状数组)
See you~题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1892解题思路:题目大意:有很多方格,每个方格对应的坐标为(i,j),刚开始时每个格子里有1本书,然后让你统计一片区域有多少本书,还可以增加书和减少,移动书。算法思想:二维树状数组。需要注意的两点是:1.x,y坐标从0开始,所以存储更新的时候坐原创 2016-03-31 17:10:47 · 528 阅读 · 0 评论 -
hihoCoder 1070 RMQ问题再临
#include #define N 10005using namespace std;struct node{ int l,r,mid,minn;}tree[N<<2];int a[N];void build(int m,int l,int r){ tree[m].l = l; tree[m].r = r; tree[m].mid = (l+r)>原创 2015-08-03 08:22:55 · 530 阅读 · 0 评论 -
hihoCoder 1050 树中的最长路
#include #include #include #include #include using namespace std;vector v[100005];int n;int vis[100005];int dis[100005];int dfs(int x,int d){ vis[x] = 1; dis[x] = d; for(int i原创 2015-08-01 16:05:13 · 617 阅读 · 0 评论 -
hihoCoder 1049 后序遍历
#include #include #include using namespace std;struct BTreeNode{ char e; BTreeNode *left; BTreeNode *right;};typedef BTreeNode* BTree;BTreeNode *createBTreeNode(char e) { BTre原创 2015-08-01 10:22:50 · 363 阅读 · 0 评论 -
POJ 2104 K-th Number(区间第k大数)(平方分割,归并树,划分树)
题目链接:http://poj.org/problem?id=2104解题思路:因为查询的个数m很大,朴素的求法无法在规定时间内求解。因此应该选用合理的方式维护数据来做到高效地查询。如果x是第k个数,那么一定有(1)在区间中不超过x的数不少于k个(2)在区间中小于x的数有不到k个因此,如果可以快速求出区间里不超过x的数的个数,就可以通过对x进行二分搜索来求出第k个数原创 2015-08-25 10:56:54 · 2049 阅读 · 0 评论 -
hdu 5412 CRB and Queries(动态区间第k大值,区间能修改)(整体二分,树状数组套平衡树,线段树套treap)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5412解题思路:官方题解:In this problem, we can use BIT and Treap.We use BIT for coding skill and each element of BIT is Treap.First, for eac原创 2015-08-25 17:23:46 · 2398 阅读 · 0 评论 -
CodeForces 339D Xenia and Bit Operations(线段树点修改)
题目链接:http://codeforces.com/problemset/problem/339/D解题思路:题意大意: 输入n和m分别表示有2^n个数和m个更新,每次更新只把p位置的值改成b,然后输出整个序列运算后的值,但是这个运算比较麻烦, 最下面一层数字两两之间进行或运算得到原来数目一半的数字,然后剩下的再两两之间进行异或运算,再得到一半,然后再或,再异或。。。原创 2015-08-23 20:30:17 · 783 阅读 · 0 评论 -
hihoCoder 1077 RMQ问题再临-线段树
今天把这题一做,才知道以前很多地方都用错了,杭电的数据也太水了,今天算是大彻大悟了。#include #include #include #define N 1000005using namespace std;int n,m;int a[N];struct node{ int l,r,mid,minn;}tree[N<<2];void build(int m,i原创 2015-07-27 23:06:12 · 499 阅读 · 0 评论 -
POJ2299 Ultra-QuickSort
题目链接:http://poj.org/problem?id=2299题目大意:通过交换相邻两个的序列元素,使得序列为升序,问你最小需要多少次。解题思路:实质就要你求该序列的逆序数。求逆序数有两种求法。一种是归并排序,还有一种就是树状数组。1.归并排序:#include #include #include #define INF 0xfffffffusing nam原创 2015-05-27 20:26:46 · 358 阅读 · 0 评论 -
hihoCoder 1078 线段树的区间修改
#include #include #include #define N 1000005using namespace std;int n,m;int a[N];struct node{ int l,r,mid,minn;}tree[N<<2];void build(int m,int l,int r){ tree[m].l = l; tree[m].原创 2015-08-03 10:40:52 · 416 阅读 · 0 评论 -
hihoCoder 1068 RMQ-ST算法
#include #define N 1000005using namespace std;int maxl[N][20], minl[N][20];int n, m, a[N];void init_RMQ(){ int l = int(log((double)n)/log(2.0)); for (int j=1;j<=l;j++) for (int原创 2015-08-02 16:19:05 · 493 阅读 · 0 评论 -
hdu 5023 A Corrupt Mayor's Performance Art(线段树+位运算)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023解题思路:题目大意:一开始所有结点的颜色均为2类,然后给你两种操作:P a b c 将a到b区间全部图为c类Q a b输出a到b区间所有点的颜色种类。算法思想:线段树区间更新,用位运算存储区间颜色状态。。。AC代码:#include #in原创 2015-09-16 21:03:17 · 399 阅读 · 0 评论 -
POJ 2299 Ultra-QuickSort(求逆序数)
题目链接:解题思路:树状数组实际上还是一个数组,只不过它的每个元素保存了跟原来数组的一些元素相关的结合值。若A为原数组,定义数组C为树状数组。C数组中元素C[ i ]表示A[ i –lowbit( i ) + 1]至A[ i ]的结合值。lowbit(i)是i的二进制中最后一个不为零的位数的2次方,可以这样计算lowbit(i)=x&(-x)当想要查询一原创 2015-08-21 23:34:27 · 561 阅读 · 0 评论 -
hdu 1166 敌兵布阵
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166解题思路:(1)Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30)(2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30);(3)Query i j ,i和j为正整数,i(4)End 表示结束。可以用树状数组做,也可原创 2015-08-17 23:53:36 · 391 阅读 · 0 评论 -
hdu 4417 Super Mario(查找区间不大于h的数有多少个)(线段树+二分查找,划分树+二分查找)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417解题思路:题目大意:一个长为n的路,每个整点处有高度为h的墙,现在超级玛丽要跳过这些墙去救公主。给m个询问,每个询问包含询问区间a-b以及玛丽的弹跳高度c,求对于每个询问,玛丽能跳过这个区间多少墙。算法思想:线段树+二分查找可以做,也可以套POJ2104(区间第k大数的原创 2015-09-05 18:58:20 · 1334 阅读 · 0 评论 -
hdu 3874 Necklace(离线操作+树状数组或线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3874解题思路: 我们可以先离线处理。先读入所有的查询,然后对所有查询按区间右端点从小到大排序,再依次进行处理,这样可以保证后面的操作不会改变前面的查询结果。使原序列中的数据一个一个的加入到线段树中,若某个数已经在序列中,则在最近出现的位置删除该数,这样就能保证每个数任意时原创 2015-08-21 23:21:04 · 563 阅读 · 0 评论 -
hdu 4288 Coder(线段树+离散化,lower_bound&&upper_bound的运用)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4288解题思路:题目大意:n次操作(n1.add x 向集合中添加元素x。2.del x 从集合中删除元素x。3.sum 询问集合中元素从小到大排列时的下标i % 5 == 3的数之和。题目保证每个元素唯一。且元素大小不超过10^9。算法思想:不知道该怎么原创 2015-09-08 20:50:11 · 429 阅读 · 0 评论 -
UVA 11992 - Fast Matrix Operations
#include #include #include #define INF 0xfffffffusing namespace std;const int N = 1000010;struct node{ int l,r; int minn,maxn,sum; int add,setv;}tree[N<<2];int anssum,ansmin,ansm原创 2015-08-02 20:47:03 · 381 阅读 · 0 评论 -
hihoCoder 1079 离散化
#include #include #include using namespace std;const int N = 100010;bool poster[N];struct Interval{ int l,r;}intervals[N];struct point{ int num,id;}points[N<<1];struct node{原创 2015-08-03 14:15:07 · 470 阅读 · 0 评论 -
hdu 5927 Auxiliary Set
Auxiliary Set题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5927解题思路:题目大意:给你一个根节点为1的树,定义一个节点为重要的节点至少满足两个条件中的一个条件:1:自己本身是重要的点2:两个以上的子孙是重要的点接着给你q组询问,给出m个不重要的点,让你输出树上有多少重要的点?算原创 2016-10-24 21:17:38 · 310 阅读 · 0 评论