数据结构
文章平均质量分 80
team79
我在努力。
展开
-
hdu 1251 字典树
开始的时候没有用字典树WA了好多次,学了之后马上就A了,哈哈哈哈爽!#include #include"stdio.h" #include"string.h" #include"stdlib.h" using namespace std; const int MAX = 26; struct Tree{ struct Tree *next[MAX];原创 2013-07-11 13:11:30 · 830 阅读 · 0 评论 -
poj 2481 树状数组
要用sort,qsort会超时第一道树状数组,原创 2014-07-16 18:00:13 · 510 阅读 · 0 评论 -
poj 1198 二维树状数组
每次更新一个点,然后最后统计一个区间很常规AC代码如下:#include #include #include #include using namespace std;const int MAX_S = 1024 + 5;int sum[MAX_S][MAX_S];int statu, S;inline int lowbit( int x ){ retur原创 2014-07-17 12:29:12 · 507 阅读 · 0 评论 -
poj 2155 二维树状数组
还是注意向上向下更新,原创 2014-07-16 20:21:55 · 498 阅读 · 0 评论 -
poj 2299 树状数组
就是求每个数之前比他大的数的个数,然后因为数太大了原创 2014-07-16 20:49:38 · 566 阅读 · 0 评论 -
poj 1990 树状数组
开始对距离排序 然后果断的TLE了然后发现应该对power排序,这样的话,我们记录一下比当前值小的个数,已经距离综合,这样就能直接求出每次要算的值AC代码如下:原创 2014-07-18 12:16:19 · 497 阅读 · 0 评论 -
poj 2309 树状数组
这题其实相同了就好,通过观察发现,其实树状数组的每个点的管辖范围就是原创 2014-07-18 21:48:35 · 622 阅读 · 0 评论 -
poj 3321 树状数组
首先对数进行DFS一下,前序优先遍历,这样做的目的原创 2014-07-18 00:18:44 · 523 阅读 · 0 评论 -
树状数组小结
树状数组就两种情况,每次更新一个点,原创 2014-07-18 21:46:21 · 592 阅读 · 0 评论 -
hdu 4902 线段树-成段更新
貌似是姿势正确的暴力也能过。。。。。AC代码如下:#include #include #include #include using namespace std;__int64 sum[810000];__int64 add[810000];__int64 N, Q;__int64 lc( __int64 root ){ return 2 * root;}原创 2014-08-01 22:49:49 · 584 阅读 · 0 评论 -
hdu 4893 线段树
比赛的时候直接套模板。。。。有个地方忘记原创 2014-07-29 19:56:51 · 596 阅读 · 0 评论 -
hdu 4031 树状数组
每个点被成功攻击次数等于原创 2014-08-24 11:50:03 · 591 阅读 · 0 评论 -
poj 3468 树状数组
树状数组天生用来动态维护数组前缀和,其特点是每次更新一个元素的值,查询只能查数组的前缀和,但这个题目求的是某一区间的数组和,而且要支持批量更新某一区间内元素的值,怎么办呢?实际上,还是可以把问题转化为求数组的前缀和。 首先,看更新操作update(s, t, d)把区间A[s]...A[t]都增加d,我们引入一个数组delta[i],表示A[i]..原创 2014-08-23 14:08:02 · 672 阅读 · 0 评论 -
从2-3树到红黑树
记得第一次知道红黑树是本科看算法导论的时候,当时直接看的红黑树,但是有很多事情不明白,比如为什么会有旋转这个操作,它是怎么被发明出来的一直不理解。直到后来看了2-3树之后,发现可以把红黑树看成2-3树的一种实现。文章中很多东西都是从别人那里转载过来的,主要是整理一下,方便之后查询。 主要链接: 算法–红黑树完整代码Java实现 浅谈算法和数据结构: 八 平衡查找树之2-3树 浅谈算法和数据结原创 2017-07-23 20:09:27 · 540 阅读 · 0 评论 -
后缀数组总结
后缀:字符 串 r 的 从 第 i 个 字 符 开 始 的 后 缀 表 示 为 Suffix(i) 后缀数组:后缀数组 SA 是一个一维数组,SA(i)表示排序后第i个后缀数组的起始位置为SA(i) 名次数组:名次数组 Rank[i]保存的是 Suffix(i)在所有后缀中从小到大排列的“名次”。 2倍增算法 待排序的字符串放在 r 数组中,从 r[0]到 r[n-1],长度为 n,且原创 2017-06-01 18:11:25 · 403 阅读 · 0 评论 -
树分治算法
树分治树分治有两种: 分治策略: POJ 1741#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#incl原创 2017-09-11 08:41:57 · 285 阅读 · 0 评论 -
kd树(学习总结及伪代码)
代码实现:GitHub:team79\Tree\KDTreekd树是用来为求k临近而创建的数据结构,查询的平均复杂度是logN(和二叉树很像)kd树的创建 这里在创建kd树的时候,这里的算法是循环依次采取各个维度来构建二叉树,也有做法是选取数据在该维度上方差最大的那一维,因为方差大代表数据较分散,会有更好的分辨率。插入节点insert(Point x, KDN...原创 2016-07-13 17:07:20 · 4404 阅读 · 2 评论 -
poj 3067 树状数组
首先排序下。。。。AC代码如下:#include #include #include #include using namespace std;const int MAX_N = 1000;struct Node{ int a, b;};Node node[1000010];int sum[MAX_N+5];int M, N, K;bool cmp(原创 2014-07-16 22:18:57 · 610 阅读 · 0 评论 -
hdu 1556 树状数组
这题用树状数组做的,貌似原创 2014-07-16 18:15:37 · 557 阅读 · 0 评论 -
hdu 1075 字典树
#include #include #include #include #include #include using namespace std;struct treenode{ bool is_over; char english[12]; treenode *next[26]; treenode(){ is_over = false; memset( engl原创 2013-07-15 11:33:43 · 534 阅读 · 0 评论 -
数据结构--堆结构
最大-最小堆1.定义2.最大-最小堆插入3.删除最小元素原创 2013-11-29 21:15:48 · 894 阅读 · 0 评论 -
hdu 1394 线段树
求出最初的的逆序数之后,有公式直接求其他的。。。。很容易推,自己推。。。。AC代码如下:#include #include #include #include using namespace std;#define MAX 5000int sum[4*MAX];void PushUp( int rt ){ sum[rt] = sum[rt*2] + sum[rt*2+原创 2014-02-24 20:27:12 · 798 阅读 · 0 评论 -
hdu 1754 线段树
AC代码如下:#include #include #include #include using namespace std;#define MAX 220000int Max[4*MAX];//注意这里int leftchild( int parent ){ return parent * 2;}int rightchild( int parent ){原创 2014-02-24 18:26:36 · 744 阅读 · 0 评论 -
hdu 1022 栈
/*题目大概意思:有N辆火车,以序列1方式进站,判断是否能以序列2方式出栈。进站不一定是一次性进入,也就是说中途可以出站。举出一列数据 7 1234567 4321576上面数据应该是 in in in in out out out out in out in in out out;*/#include #include #include using namespace st原创 2013-07-16 16:36:02 · 697 阅读 · 0 评论 -
hdu 2795 线段树
题意: 在一个长宽为h*w的黑板上贴海报,每张海报为1*wi,问新贴的海报能贴的最大高度,若不能贴则输出-1,注意贴海报的时候总是靠左贴。思路: 线段树,因为n最大只有200000,所以当h取min(h,n)即可,最后数组只需开到8000000,然后Max【】保存该区间内能放的最大宽度,然后在query的时候顺便更新即可AC代码如下:#include原创 2014-03-11 10:50:19 · 643 阅读 · 0 评论 -
poj 2828 线段树
思路:从后往前推,那么最后一个人肯定能在他想的位置上,倒数第二个人时,对与他来说当时只有i-1个人 他要在pos【i】个人的后面,那么找出除去倒数第一个人的第pos【i】+1个空位在哪即可那么num【root】表示l到r还有几个空位,每次找出第pos【i】+1个空位在哪即可AC代码如下:#include #include #include #include using na原创 2014-03-11 21:51:45 · 577 阅读 · 0 评论 -
poj 2886 线段树
首先要打表找出1-N中因数最多的数K保存起来然后每次在求的时候直接着第K个跳出的即可然后num【root】表示l到r还有多少人未跳出因为每次剩余的个数知道,moves【i】知道,所一可以求出此次是要求当前未跳出的人中间的第几个,找出其编号即可然后一直循环K次AC代码如下:#include #include #include #include #include us原创 2014-03-12 15:56:00 · 891 阅读 · 0 评论 -
hdu 1166 线段树
AC代码如下:#include #include #include #include using namespace std;#define MAX 50000int sum[4*MAX];void PushUp( int rt ){ sum[rt] = sum[rt*2] + sum[rt*2+1];}void built( int l, int r, in原创 2014-02-24 18:47:07 · 692 阅读 · 0 评论 -
hdu 1698 线段树-成段更新
没过#include #include #include #include using namespace std;int val[410000], flag[410000];int N;int lc( int root ){ return root * 2;}int rc( int root ){ return root * 2 + 1;}void push原创 2014-03-13 22:20:02 · 689 阅读 · 0 评论 -
poj 3468 线段树--成段更新
裸的线段树AC代码如下:#include #include #include #include using namespace std;long long sum[410000];long long add[410000];long long N, Q;long long lc( long long root ){ return 2 * root;}lon原创 2014-03-24 22:27:41 · 760 阅读 · 0 评论 -
poj 2528 线段树--成段更新
数据有问题比方说31 101 4 6 10正确答案yin原创 2014-04-20 19:00:47 · 583 阅读 · 0 评论 -
zoj 3772 线段树--单点更新
题意:给一个序列An有m个询问,每个询问包括l和r定义f(l) = a[l], f(l+1) = a[l+1], f(x)=f(x-1) + a[x] * f(x-2), x >= l + 2;对每个询问,求f(r);当x>=l+2时,f(x)=f(x-1) + a[x]* f(x-2), 所以就有递推式所以当r>=l原创 2014-04-06 22:39:11 · 684 阅读 · 0 评论 -
zoj 2900 DP(线段树优化)
同样是暴力,别人能过,我不能过,sheng h原创 2014-04-12 10:52:54 · 669 阅读 · 0 评论 -
zoj 3789 并查集
浙大月赛的B题,搞了一天,终于搞懂了,第一次敲并查集注意 #include #include #include #include using namespace std;const int MAXN = 600000;int dis[MAXN], hash[MAXN], ft[MAXN], sz[MAXN];int N, M, top;int find( int原创 2014-06-03 20:50:11 · 961 阅读 · 0 评论 -
2014百度之星资格赛1003
#include #include #include #include using namespace std;struct Node{ struct Node* nt[2];};Node node;void add_num( Node *a, long long pos, long long num ){ if( pos < 0 ){ ret原创 2014-05-17 20:35:07 · 563 阅读 · 0 评论 -
poj 2352 树状数组
要求x1 然后先原创 2014-07-17 08:43:11 · 519 阅读 · 0 评论 -
AVL树实现
“AVLTree.h”#pragma once#include <algorithm>#include <string>#include <iostream>using namespace std;class AVLNode { //树节点 friend class AVLTree; AVLNode *lchild,...原创 2018-04-22 23:34:31 · 236 阅读 · 2 评论