模板
ureaster
这个作者很懒,什么都没留下…
展开
-
模板:母函数
hdu 1398 ``` People in Silverland use square coins. Not only they have square shapes but also their values are square numbers. Coins with values of all square numbers up to 289 (=17^2), i.e., 1-原创 2017-10-17 20:44:27 · 212 阅读 · 0 评论 -
树状数组 区间修改 区间查询
#include #include #define lowbit(x) (x&-x) #define LL long long #define N 100005 int n,q,x,y,z; LL a0[N],a1[N],a2[N]; char c; void read(int &t) { t=0; int f=1; for(;!isdigit(c=getchar());) if(原创 2017-12-01 22:48:59 · 183 阅读 · 0 评论 -
洛谷P2617 Dynamic Ranking 树状数组套主席树
#include #include #include #define lowbit(x) (x&-x) #define N 10005 using namespace std; int n,m,a[N],b[N*2],s[N][3],len; char c; int rt[N],val[N*400],lch[N*400],rch[N*400],cnt; int L[20],R[20],llen,r原创 2017-12-15 19:17:35 · 271 阅读 · 0 评论 -
文艺平衡树
#include #define N 100005 int n,m; int root,fa[N],ch[N][2],size[N],rev[N]; void swap(int &a,int &b) { a^=b, b^=a, a^=b; } int son(int t) { return t==ch[fa[t]][1]; } void pushup(int t) { si原创 2017-12-07 18:22:19 · 231 阅读 · 0 评论 -
树链剖分:洛谷 P2590 [ZJOI2008]树的统计
一共三部分:树剖,线段树,LCA 难打主要是因为代码长 #include #include #include #define mid (l+r>>1) #define N 30005 #define M 19 #define INF 1128481604 int n,q; int mx[N<<2],sum[N<<2]; int head[N],next[N<<1],to[N<<1]; int原创 2017-12-30 17:59:50 · 228 阅读 · 0 评论 -
树上区间和1
#include #define lowbit(x) (x&-x) #define N 100005 int n,q,w[N]; int head[N],next[N<<1],to[N<<1]; int fa[N],son[N],dep[N],size[N],top[N],num[N],pos[N]; void add(int a,int b) { static int cnt=0; to[+原创 2017-12-28 18:58:39 · 235 阅读 · 0 评论 -
洛谷 P3806 【模板】点分治1
#include #include #include #define K 10000005 #define N 10005 using std::max; int n,m; int hd[N],nxt[N<<1],to[N<<1],w[N<<1]; int vis[N]; int rt,sz[N],siz[N]; int son[N],dfn[N],cnt; bool mp[K]; void ad原创 2018-01-06 13:06:48 · 544 阅读 · 1 评论 -
分块*2
洛谷 P3203 [HNOI2010]BOUNCE 弹飞绵羊 #include #include #define N 200255 #define M 450 int n,q,a[N]; int stp[N],nxt[N]; void build() { memset(nxt,66,sizeof nxt); scanf("%d",&n); for(int i=原创 2018-01-06 13:08:53 · 216 阅读 · 0 评论 -
无向连通图的割点和桥
割点 #include #define N 100005 using namespace std; int n,cnt; int hd[N],nxt[N<<1],to[N<<1],tot; int dfn[N],low[N],now; int ans[N]; void add(int a,int b) { to[++tot]=b; nxt[tot]=hd[a]; hd[a]=tot;原创 2018-02-25 09:03:57 · 233 阅读 · 0 评论 -
郁闷的出纳员
splay真的很慢#include #include #define N 100005 #define INF 100000007 int m,lowst,o,tmp,leave; char c; int root,fa[N],ch[N][2],val[N],size[N],cnt; int son(int t) { return t==ch[fa[t]][1]; } void pushu原创 2017-12-08 19:07:04 · 262 阅读 · 0 评论 -
我的第一棵平衡树-SB树
数组实现的SB树(而且竟然没有结构体) 功能就和普通的二茬查找树一样: insert: 插入元素 erase: 删除元素 pre: 查询一个元素的前驱 suc: 查询一个元素的后继 select: 返回第几小的元素的值 rank: 返回一个值的位置 除了maintain全部非递归实现,并且有assert(似乎并没有什么用) maintain写得不是很高效, 并且缺储存平衡树中元原创 2017-11-07 16:32:45 · 2222 阅读 · 1 评论 -
我的第二棵平衡树: 普通Treap
这又是洛谷平衡树的模板题... [SBT的写法] Treap的代码很短,只是在普通二茬查找树的插入操作和删除操作中加入维护堆性质的rotate, 形式也和堆很像,插入时将新节点不断向上抬,删除时将节点向下降直至弹出. 随机种子的选取可以用一些玄学的方法(来自网上某位大佬) inline int random() { static int seed=48271; return原创 2017-11-09 13:30:22 · 244 阅读 · 0 评论 -
rbtree
#include #include struct RBtree { struct Node { int val,color,lr; Node *fa,*lch,*rch; Node():fa(NULL),lch(NULL),rch(NULL) {} Node(int x,int islr,Node *pre):val(x),color(1),lr(islr),fa(pre),l原创 2017-10-27 18:35:48 · 225 阅读 · 0 评论 -
模板:高精度
#include #include #include using namespace std; const int N=1024; struct int1024 { char arr[N]; int len,neg; int1024():len(0),neg(1) { memset(arr,0,sizeof arr); } void read() { scanf("%s",arr原创 2017-10-19 20:59:54 · 235 阅读 · 0 评论 -
模板..
#include #include struct RBtree { struct Node { int val,color; Node *lch,*rch; Node():val(0),color(0),lch(NULL),rch(NULL) {} }; Node *root; void insert(int x) };原创 2017-10-21 16:32:26 · 163 阅读 · 0 评论 -
模板:块状链表
#include #include using namespace std; int max(const int x,const int y) { return x>y?x:y; } int min(const int x,const int y) { return x<y?x:y; } struct Block { static const int M=10; static int p;原创 2017-10-12 17:27:28 · 312 阅读 · 0 评论 -
模板:vector
#include #include #include template class vector { private: int max_size; T *arr; void resize() { T *na=new T[2*max_size]; memcpy(na,arr,max_size*sizeof(T)); delete[] arr; max_size*=2; arr=原创 2017-10-13 08:50:53 · 208 阅读 · 0 评论 -
模板:强连通分量和缩点
洛谷 P2002 消息扩散 缩点后输出入度为0的点 (tarjan) #include #include #include #define N 100010 #define M 500010 using namespace std; int n,m,x,y,Q[M],dfn[N],low[N],inq[N],p[N],in[N],tail,now,size,ans; vectorg[N];原创 2017-10-30 14:46:13 · 321 阅读 · 0 评论 -
LCA的三种求法 - HDU 2586
Tarjan 一遍 大法师 处理所有询问, 每次递归处理子树, 把子树与当前节点的并查集合并. 然后如果一个询问的两个节点都被访问, 直接输出答案 #include #include #include using namespace std; int T,n,m,a,b,c,p[40010],vis[40010],dep[40010],ans[210]; vector >g[40010]; v原创 2017-10-30 17:37:29 · 244 阅读 · 0 评论 -
模板:list
起始数组编号:0 包含函数: size, operator[], push_back(val), insert(pos,val)(在pos前插入val), erase(pos), find(val);(return -1) 压行前 #include #include #include using namespace std; //array numbered fr原创 2017-10-13 12:30:29 · 173 阅读 · 0 评论 -
非旋treap
#include #define N 100005 using namespace std; int rt,val[N],lch[N],rch[N],pro[N],sz[N],cnt; int rnd() { static int sd=4234; return sd*=3423; } int node(int v) { val[++cnt]=v; pro[cnt]=rnd(); sz[原创 2018-02-25 10:27:36 · 220 阅读 · 0 评论