数据结构
单木
无脑程序猿
展开
-
带状矩阵的压缩存储
对于n*n的方阵,若它的全部非零元素落在一个以主对角线为中心的带状区域中,这个带状区域包含主对角线 ,以及主对角线下面及上面各b条对角线上的元素,那么称该方阵为半带宽为b的带状矩阵。带状矩阵的特点是:对于矩阵元素a(i,j)!=0,|i-j|带状矩阵的存储空间为(2*b+1)*n-2*b。2*b+1为每一行所需空间,所以乘以n行,又因为第一行和最后一行之分配b+1个空间,所以公式中要减去2原创 2016-01-11 15:24:56 · 5923 阅读 · 1 评论 -
单调队列
得粉碎原创 2016-10-31 20:08:10 · 165 阅读 · 0 评论 -
hdu 5945 Fxx and game(dp+单调队列)
题意一个数由x变到1,有两种操作,减去一个1到t的数或除以k(前提是能整除),问最少操作是多少。代码/* ********************************Author : danmuCreated Time : 2016年11月01日 星期二 00时08分02秒File Name : a.cpp***********************原创 2016-10-31 20:07:33 · 316 阅读 · 0 评论 -
codeforces732E Sockets(数据结构+贪心+思维)
题意思路先比较有无相同的,有则匹配,然后对s序列除2向上取整,再比较,一直循环,循环31次。我用的multimap。代码/* ********************************Author : danmuCreated Time : 2016年11月10日 星期四 12时11分27秒File Name : a.cpp*************原创 2016-11-10 16:43:20 · 357 阅读 · 0 评论 -
数据结构总结
树状数组,特点:单点更新,区间查询,稍微修改后能区间更新,单点查询。线段数,特点:比树桩数组复杂,能处理问题也更加广泛,延时更新。莫队算法,特点:在离线查询的前提下,通过更改查询顺序,来利用前一次查询的结果,达到节省时间的目的。原创 2016-09-29 20:45:33 · 256 阅读 · 0 评论 -
线段树
#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1long long sum[MAX<<2],col[MAX<<2];void pushup(int rt)//本身不是动态的过程,在递归过程中向上更新{ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void pushdown(int rt,int m){原创 2016-04-29 21:44:51 · 237 阅读 · 0 评论 -
树状数组
int lowbit(int x){ return x&(-x); }int sum(int x){ int ret=0; while(x){ ret+=ss[x]; x-=lowbit(x); } return ret; }void add(int x,int num){ while(x<=n){原创 2016-07-28 21:40:10 · 205 阅读 · 0 评论 -
字典数 Trie
代码struct Trie{ int v; Trie *next[26]; Trie(){ v=0; memset(next,NULL,sizeof next); } };Trie* root;void ins(char *s){ int l=strlen(s); Trie *p=root; for(i原创 2016-09-15 16:09:59 · 227 阅读 · 0 评论 -
hdu 5682 Counting Intersections 离散化+树状数组
/*Sherlock and Watson and Adler*/#pragma comment(linker, "/STACK:1024000000,1024000000")#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>#include<stack>#include<math.h>#inclu原创 2016-08-18 20:46:11 · 291 阅读 · 0 评论 -
hdu 5792 World is Exploding 离散化+树状数组
#include <bits/stdc++.h>using LL = long long ;#define ALL(v) (v).begin(),(v).end()#define showtime fprintf(stderr,"time = %.15f\n",clock() / (double)CLOCKS_PER_SEC)const int N = 100000 + 5;int n,A[原创 2016-08-03 10:59:26 · 267 阅读 · 0 评论 -
莫队算法
莫队算法:用来处理一类无修改的离线区间查询问题。 前提是无修改,因此可以通过适当的查询顺序来降低时间复杂度。原创 2016-07-10 10:19:49 · 194 阅读 · 0 评论 -
二叉树中序遍历的非递归实现
按照二叉树中序遍历的定义,无论是访问整课树还是其子树,均应该遵循先访问根节点的左子树,然后访问根节点,最后访问根节点的右子树的规律。因为对于一棵树t,如果t非空,首先应该进入t的左子树访问,此时由于t的根节点及右子树尚未访问,因此必须将t保存起来,放入栈中,以便访问完其左子树后,从栈中取出t,进行其根节点及右子树的访问。在整个二叉树中序遍历中,程序要做的工作始终分成两个部分:当前正在处理的树和保存原创 2016-01-12 14:07:10 · 435 阅读 · 0 评论 -
并查集
1.通俗易懂,适合初学者。http://blog.csdn.net/dellaserss/article/details/77244012.讲解详细,有更多思考。http://blog.csdn.net/dm_vincent/article/details/7655764struct DisjointSet{ vector<int> father,rank; D...原创 2018-12-23 21:02:13 · 318 阅读 · 0 评论