数据结构
GaoJieVery6
这个作者很懒,什么都没留下…
展开
-
二叉堆的插入,删除和逐层输出
代码主要借鉴《Data Structures and Algorithm Analysis in C (Second Edition)》。插入操作就是现在最底部创建一个空穴,然后上滤。删除操作用下滤实现,注意要考虑一个节点只有一个儿子的情况(这种情况只可能出现在堆的最后)。逐层输出利用stl的queue实现,实现的过程类似bfs。/* ...原创 2018-03-04 10:36:09 · 651 阅读 · 0 评论 -
hud 2222 Keywords Search (AC自动机模板题)
如果不熟悉AC自动机,可以看看这篇博客https://www.cnblogs.com/cmmdc/p/7337611.html#include <iostream>#include <cctype>#include <cstring>#include <string>#include <cmath>#include <...原创 2018-08-15 22:22:41 · 135 阅读 · 0 评论 -
线段树模板
线段树模板,以利用线段树求和为例目录0.建树1.单点修改2.对应单点修改的区间查询3.利用懒惰标记的区间加值与区间查询4.利用懒惰标记的区间改值0.建树const int MAXM=50000; //定义 MAXM 为线段最大长度int a[MAXM+5],st[(MAXM<<2)+5]; // a 数组为 main 函数中...原创 2018-08-08 20:46:36 · 152 阅读 · 0 评论 -
hdu 1251 统计难题 Trie树
#include <iostream>#include <cctype>#include <cstring>#include <string>#include <cmath>#include <algorithm>#include <vector>#include <map&g原创 2018-08-13 23:18:41 · 149 阅读 · 0 评论 -
leetcode 第23题 (递归)
class Solution {public: ListNode* merge2Lists(ListNode* node1, ListNode* node2){ if(node1 == NULL) return node2; if(node2 == NULL) return node1; if(node1->val > node2->val){ node2-&...原创 2018-08-18 22:46:14 · 291 阅读 · 0 评论 -
hdu 2896 病毒侵染 (AC自动机)
不知道是我理解能力弱还是题意不清,最后的输出结果坑了我好长时间。这个题不要求去重的,给个数据吧Sample Input1ab1ababSample Outputweb 1: 1 1total: 1#include <iostream>#include <cctype>#include <cstring>#include <...原创 2018-08-17 12:07:29 · 166 阅读 · 0 评论 -
hdu 2492 Ping pong (树状数组,基础题,水题)
树状数组中的c[i]表示技能值为i的人有c[i]个b[i]表示在第i个人前面,比第i个人的技能值低的人有b[i]个d[i]表示在第i个人后面,比第i个人的技能值低的人有d[i]个#include <cstdio>#include <cstdlib>#include <vector>#include <queue>#includ...原创 2018-08-20 16:07:53 · 211 阅读 · 0 评论 -
uva 11992 Fast Matrix Operations (线段树区间修改,模板题)
e[i]给出第i个点对应的区间范围s[k][i]给出矩阵第k行的线段树第i个点对应的区间的和x[k][i]维护最小值d[k][i]维护最大值#include <cstdio>#include <algorithm>#include <cstring>#define inf 0x3f3f3f3fusing namespace std;...原创 2018-08-20 20:02:37 · 178 阅读 · 0 评论 -
uva LA 3026 Period (KMP算法)
#include <iostream>#include <string>#include <cstdio>#include <cstring>using namespace std;int f[1000005];int main(){ //freopen("ztest.txt","r",stdin); int n; int f...原创 2018-08-20 22:18:52 · 217 阅读 · 0 评论 -
poj 3481 Double Queue(Treap,模板题)
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#define mian mainusing namespace std;struct Node{ int r, val, name; Node* ch[2]; int cmp(int ...原创 2018-08-21 17:02:20 · 269 阅读 · 0 评论 -
uva 11922 Permutation Transformer (splay树的分割及合并)
这是按ljr的splay写的#include <cstdio>#include <cstdlib>#include <iostream>#include <algorithm>#include <vector>#include <cstring>#include <string>using na原创 2018-08-24 18:31:32 · 190 阅读 · 0 评论 -
hdu 3038 How Many Answers Are Wrong (带权并查集)
#include <cstdio>#include <algorithm>#include <cstdlib>using namespace std;int father[1000000];int value[1000000];int find(int x){ if(x == father[x]) return x; int fx = f...原创 2018-08-29 16:11:08 · 130 阅读 · 0 评论 -
POJ 3264 RMQ算法
#include <cstdio>#include <algorithm>#include <cstring>using namespace std;int n,q;int dmin[50005][50];int dmax[50005][50];int a[1000000];int ansmin, ansmax;void RMQ_ini()...原创 2018-03-15 21:50:53 · 193 阅读 · 0 评论 -
KMP算法
KMP算法#include <iostream> #include <string.h> #include <stdio.h> using namespace std; const int maxn = 1000010; char text[maxn]; char patten[maxn]; int next[max...原创 2018-08-15 20:52:54 · 144 阅读 · 0 评论 -
LeetCode OJ 第二题 Add Two Numbers (链表)
写的有些复杂了,还是太年轻。。。。 str2 += l2->val; l2 = l2->next; } int size = min(str1.size(), str2.size()); if(size == str1.size()) str = str2; els...原创 2018-08-07 20:25:38 · 159 阅读 · 0 评论 -
hdu 1686 Oulipo 字符串kmp算法
#include <iostream>#include <cctype>#include <cstring>#include <string>#include <cmath>#include <algorithm>#include <vector>#include <map&g原创 2018-08-14 09:31:17 · 164 阅读 · 0 评论 -
栈ADT(有测试例程)
#include <cstdio>#include <cstdlib>struct Node;typedef struct Node *PtrToNode;typedef PtrToNode Stack;struct Node{ int ele; PtrToNode Next;};bool IsEmpty( Stack S ){ return S-...原创 2018-03-08 11:32:25 · 278 阅读 · 0 评论 -
链表的游标实现(最全面)
代码的主体来自于《Data Structures and Algorithm Analysis in C (Second Edition)》,我在书中代码的基础上进行了一些修改与补充。修改 补充 说明:1. 添加了Last变量,代表链表的最后一个元素的下标,使IsEmpty( )等函数的实现更为直观,快捷。2. 增加了FindPrevious,Print,Out三个函数,使API更为完善。3....原创 2018-03-08 10:33:12 · 692 阅读 · 0 评论 -
队列的数组实现
注意Pop,Push,Front中,都利用了“引用”。如果不想用“引用”,可以改为指针。#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxd = 10000;typedef struct Queue{ int ele[m...原创 2018-03-10 11:54:36 · 153 阅读 · 0 评论 -
链表API
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <iostream>using namespace std;typedef struct node{ int ele; node* next;}node;...原创 2018-03-21 17:29:18 · 590 阅读 · 0 评论 -
uva 1600 bfs 多加一个状态
node.state代表此时已经走了几个障碍,node.step代表到达此状态需要走几步#include <cstdio>#include <algorithm>#include <cstring>#include <string>#include <queue>#include <iostream>#def...原创 2018-07-16 20:17:10 · 155 阅读 · 0 评论 -
uva 12166 递归建树
想了好久没想出来,看了大佬的代码恍然大悟,这递归写的惊为天人~我只解释一点,当确定一个节点为基准时,设此节点深度为depth,权重为weight,如果这棵树平衡,那么树的总权值为weight<<depth,这是因为树是二叉树,一个节点为weight,若要平衡,则它的兄弟节点也为weight,因此它的父亲节点为2*weight,同理,此节点的叔父节点也为2*weight,此节点的祖父...原创 2018-07-16 22:13:46 · 215 阅读 · 0 评论 -
uva 673 栈
#include <iostream>#include <cstring>#include <stack>#include <cstdio>using namespace std;int main(){ //freopen("ztest.txt","r",stdin); //freopen("zans.txt","原创 2018-07-15 16:41:57 · 145 阅读 · 0 评论 -
uva 712 二叉树
好好读题,尤其是input,关于xi会有一个对应关系,Eg:第一行输入x3, x2, x1, 然后输入100,那么实际要操作的指令是001#include <cstdio>#include <cstring>#include <iostream>#include <string>using namespace std;int main()...原创 2018-07-15 17:59:52 · 179 阅读 · 0 评论 -
Codeforces 629D Babaei and Birthday Cake 树状数组,LIS
这个题有点像lis,但是又不是常规的lis,因为它不是要求子序列最长,而是要求子序列的权值最大,所以用树状数组来维护这个最大值,tree[i]表示当第i个simple cake在最上层时,cake的体积最大是多少。那么本题的做法就是先算出每个simple cake的体积,然后给它们排序,然后遍历原始顺序的simple cake,设为i,找到i在排好序的数组中的位置pos,找到[1,pos-1]区间...原创 2018-07-27 18:24:56 · 213 阅读 · 0 评论 -
splay树数组实现
建议大家看看电子科大acm对splay树的讲解,B站上有附上模板//#include<bits/stdc++.h>#include<cstdio>#include<iostream>using namespace std;#define MAXN 1000006struct node{ int data;}a[MAXN];//a存具...原创 2018-07-27 20:26:43 · 242 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers (线段树,Lazy标记)
线段树的模板题,注意利用lazy标记#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <string>#include <stack>#defi原创 2018-08-09 21:30:59 · 107 阅读 · 0 评论 -
一种实用的建树方法
输入数据,不知道一个父亲节点具体有几个儿子节点时,可以考虑用此方法建树。每两个“ . ”代表一层。1..2....3....4......5....6......7........8..9....10..11....12#include <iostream>#include <cstdio>#include <set>...原创 2018-09-17 16:57:20 · 700 阅读 · 0 评论