大三ACM - 树
Little_boy_z
这个作者很懒,什么都没留下…
展开
-
2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 G
You have two strings SSS and TTT in all capitals.Now an efficient program is required to maintain a operation and support a query.The operation C i chC~i~chC i ch with given integer iii an原创 2017-09-11 18:16:57 · 326 阅读 · 0 评论 -
HOJ 2275 Number sequence(树状数组) 大于小于问题
题意:给定一个n个元素的数列,令Ai, Aj, Ak,使得 Ai Ak 且 i 要建立两次树状数组。首先,我们插入数据进入树状数组时,用一个tmp1数组来记录每个数前面有几个小于它的。这样就保存了 Ai 之后我们清空数组,再倒着插入一次,用tmp2数据记录每个数前面有几个小于它的。这样保证了Aj > Ak的数量了。我们一乘即可#incl原创 2017-10-21 13:41:18 · 252 阅读 · 0 评论 -
poj 1990 MooFest 树状数组
题意就是有N头牛,每头牛都有一个坐标和声调值(x, v),两头牛之间通讯要花费的能量是他们的距离乘以最大的一个音调值,现在要任意两头牛之间都相互通讯一次,求总共需要花费多少能量?准备两个树状数组,并且正反进行两次。分别找左边还有右边,两个数组存别存放个数和长度、#include #include #define lowbit(x) (x&(-x)原创 2017-10-21 17:55:51 · 148 阅读 · 0 评论 -
hdu1305-Immediate Decodability 字典树
字段树求前缀。这里长短不一,只有存在前缀即可。如果我们存下来排序会超时。所以我们不能存下来。如果已存的长,我们要找的短。那么我们只要遍历短的,如果短的全部都是已经存在的点。那么短的就是长的的内存。如果已存的短,我们在短的最后一个字母处放一个flag,遍历长的,如果长的经历到这个点,发现这个点存在flag,说明短的是这个长的的前缀。#include #in原创 2017-10-12 16:16:41 · 191 阅读 · 0 评论 -
hdu 1075 What Are You Talking About 字典树 单词替换
题目大意:将给出的火星字符串翻译成英文字符串,每个单词有对应的英文单词,如果不存在对应的就输出原有的即可。最简单的方法就是map一一对应后输出,也可以通过。但是这种单次替换的问题,最好的方法就是用字典树。字段树末端保存这个单词对应的哪一个单词。#include #include #include #includeusing namespace s原创 2017-10-12 16:27:24 · 332 阅读 · 0 评论 -
hdu 1247 Hat’s Words 字典树单词拼接
给你一堆单词,询问那几个单词可以有其他的两个组成。首先先把所有单词建立一个字典树。之后枚举每一个单词,看看他有没有前缀,如果有,那么把前缀删去,再看看删去后是否还存在删去后的单词。其实不用字典树也可以...原创 2017-10-12 16:34:25 · 342 阅读 · 0 评论 -
hdu 1298 字段树+DFS
#include #include #include #include #include#includeusing namespace std;#define M 105char s2[M],ans[M],end[M]; //单词int p;//模拟按键,比如说0对应2按键,2有三种可能0,1,2(a,b,c)int phone[8][4]={{0,1,原创 2017-10-12 16:58:08 · 376 阅读 · 0 评论 -
HDU 2222 ac自动机模板题
//======================// HDU 2222// 求目标串中出现了几个模式串//====================#include #include #include #include #include using namespace std;struct Trie{ int next[500010][2原创 2017-10-12 18:27:44 · 201 阅读 · 0 评论 -
poj2778--DNA Sequence(AC自动机+矩阵优化)
http://blog.csdn.net/winddreams/article/details/43452145DNA SequenceTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 12252 Accepted: 4661Descriptio转载 2017-10-12 19:09:59 · 187 阅读 · 0 评论 -
树状数组 总结
我看到的讲的最仔细的最棒的一个树状数组讲解。http://www.cnblogs.com/hsd-/p/6139376.html直接看这个链接即可。单点更新,区间查询#include#include#include#includeusing namespace std;int n,m;int c[500005];int lowbit(in原创 2017-10-16 17:29:15 · 200 阅读 · 0 评论 -
51nod 1107 斜率小于0的连线数量 树状数组
二维平面上N个点之间共有C(n,2)条连线。求这C(n,2)条线中斜率小于0的线的数量。二维平面上的一个点,根据对应的X Y坐标可以表示为(X,Y)。例如:(2,3) (3,4) (1,5) (4,6),其中(1,5)同(2,3)(3,4)的连线斜率 Input第1行:1个数N,N为点的数量(0 <= N <= 50000)第2 - N + 1行:N个点的坐标原创 2017-11-22 19:27:53 · 257 阅读 · 0 评论 -
hdu 2688 树状数组求 序列对
R表示k1--k2依次向左循环1位 Q:查询多少升序序列#include #include using namespace std; #define maxn 3000005 int arr[10005],a[maxn]; int lowbit(int x) { return x&(-x); } void upd原创 2017-10-21 10:50:13 · 180 阅读 · 0 评论 -
hdu 1892 See you 二维树状数组,很好的一道题
题目给定4种操作: S x1 y1 x2 y2 询问以(x1 , y1) - (x2 , y2)为对角线的矩形的面积,但是这个对角线不一定是正对角线。A x1 y1 n 把点(x1 , y1)加上n。D x1 y1 n点(x1 , y1)减去n如果不足n就全部删除即可。M x1 y1 x2 y2 n 把点(x1 , y1)点值中扣除n加到(x2 , y2),如果不过n则把(x1 , y1)值原创 2017-10-21 10:39:27 · 200 阅读 · 0 评论 -
HOJ1867 经理的烦恼 树状数组
Jerry是一家公司销售部门的经理。这家公司有很多连锁店,编号为1,2,3,... Jerry每天必须关注每家连锁店的商品数量及其变化,一项很乏味的工作。在连锁店比较少的时候,Jerry喜欢计算编号在[i,j]区间内的连锁店中商品数量为素数的有多少家,但是现在连锁店的数量急剧增长,计算量很大,Jerry很难得出结果。 输入格式题目有多组输入。每组输入第一行有三个整数:C 连锁店的数量原创 2017-10-17 17:34:09 · 238 阅读 · 0 评论 -
HOJ2430 Counting the Algorithms 树状数组
As most of the ACMers, wy‘s next target is algorithms, too. wy is clever, so he can learn most of the algorithms quickly. After a short time, he has learned a lot. One day, mostleg asked him that how原创 2017-10-17 18:13:23 · 224 阅读 · 0 评论 -
POJ2299 树状数组求逆序数
给定n个数,要求这些数构成的逆序对的个数。第一点:缩点第二点:树状数组我们每次加入一个数,我们要看比这个数小和等于的有几个z,之后用总数减去比这个z,也就是比他大的。缩点省略了,假设锁完之后数据为5 2 1 4 3.我们建立树状数字 0 0 0 0 0.我们把第一个数5加进入,变成 0 0 0 0 1. 此时我们要看1-5之间有几个1,现在是原创 2017-10-17 19:25:14 · 171 阅读 · 0 评论 -
POJ2352 Stars 树状数组
他已经按照顺序给你得了,不需要我们另外排序,直接忽略y即可,只看x。#include #include #include #include #include #include #include #include #include #include #include #incl原创 2017-10-17 19:44:29 · 160 阅读 · 0 评论 -
poj3067 Japan 树状数组+逆序对
日本有N个城市在东边,从北至南编号为1 2 3,,,N,M个城市在西边,从北至南编号为1 2 ,,,,M,K条高速公路将被建造高速公路的一端在西边,一端在东边输入有多组样例,每组样例第一行为n m k接下来有k行,分别为高速公路的起点和端点求高速公路的交点有多少个,不包括以城市为相交点打死我也想不到用树状数原创 2017-10-17 19:54:45 · 302 阅读 · 0 评论 -
POJ 2481 Cows 树状数组
给你n个线段,让你求每个线段被几个线段覆盖。我们要对线段(x,y)进行处理。我们按照y从大到小排序,如果相等,那么x从小到大排序。我们这样排序的话,我们首先是可以忽略y了,后面出现的线段y一定是小于等于前面的。也就是说只看x小于前面的几个线段。比如这组数据,4个线段。3 52 41 32 32 6首先排序2 63原创 2017-10-18 18:39:46 · 179 阅读 · 0 评论 -
POJ3321:Apple Tree 树状数组 (一个点通过dfs变成两个值)
给出一个苹果树,每个节点一开始都有苹果C X,如果X点有苹果,则拿掉,如果没有,则新长出一个Q X,查询X点与它的所有后代分支一共有几个苹果我们利用树状数组做有一个问题没法解决,那就是查询X及其他所有的后代。因为我们平时树状数组查询区间时,是两个点。现在只有一个点。并且我们不知道这个每个点从属于哪个点。所以我们需要dfs来赋值,对于每个点,我们要赋两个值,一个小的,一个原创 2017-10-18 19:50:29 · 193 阅读 · 0 评论 -
求一棵树的直径
随便从一个点出发,bfs找距离他最远的一个点。在从那个点出发,bfs找距离那个点最远的一个点。输出即可http://www.cnblogs.com/MashiroSky/p/5933122.html原创 2017-10-10 20:29:01 · 937 阅读 · 0 评论 -
POJ 2155 Matrix 二维树状数组 区间更新,单点查询
给出矩阵左上角和右下角坐标,矩阵里的元素 1变0 ,0 变1,然后给出询问,问某个点是多少小技巧:1,0变换,我们不停地+1即可,最后%2输出。这道题是二维树状数组的题目 #include #include #include #include #include #include #define原创 2017-10-20 12:28:23 · 193 阅读 · 0 评论 -
POJ1195:Mobile phones二维树状数组 单点更新,区间查询
题意:给出一个全0的矩阵,然后一些操作0 S:初始化矩阵,维数是S*S,值全为0,这个操作只有最开始出现一次1 X Y A:对于矩阵的X,Y坐标增加A2 L B R T:询问(L,B)到(R,T)区间内值的总和3:结束对这个矩阵的操作思路:使用二维树状数组进行操作[cpp] view plain原创 2017-10-20 12:45:24 · 186 阅读 · 0 评论 -
HDU-4614 Vases and Flowers线段树 二分
普通的区间修改的线段树,加上了二分。操作是从a开始放b个。我们首先搜寻a到n有几个空位置cnt,不等于0就可以继续往下走(题意说能放几个算几个)之后我们要找a之后的第一个空格。也就是我们a到x中只有一个空位置。这个x我们二分求,x就是我们的最左端。之后我们要找最右端,就是从a开始,我们要找min(b,cnt)个。 也就是a到x有min(b,cnt)个。x同样是二分即可。#include <c...原创 2018-02-12 17:21:43 · 205 阅读 · 0 评论