GCD:
1 int gcd(int a,int b) 2 { 3 return b==0?a:gcd(b,a%b); 4 }
快速幂:
1 void work(int x,int y) //x^y 2 { 3 int ans=1; 4 while(y!=0) 5 { 6 if(y%2==1) 7 ans=ans*x; 8 y=y/2; 9 x=x*x; 10 } 11 }
归并排序:
1 void work(int l,int r) 2 { 3 int i,j,tmp,mid; 4 if(l+1<r) 5 { 6 mid=(l+r)/2; 7 tmp=l; 8 work(l,mid-1); 9 work(mid,r); 10 for(i=l,j=mid;i<mid&&j<=r;) 11 { 12 if(a[i]>a[j]) 13 c[tmp++]=a[j++]; 14 else 15 c[tmp++]=a[i++]; 16 } 17 if(j<=r) 18 for(;j<=r;j++) 19 c[tmp++]=a[j]; 20 else 21 for(;i<mid;i++) 22 a[tmp++]=a[i]; 23 for(i=l;i<=r;i++) 24 a[i]=c[i]; 25 } 26 else 27 { 28 if(l+1==r) 29 { 30 if(a[l]>a[r]) 31 { 32 sawp(a[l],a[r]); 33 } 34 } 35 } 36 }
二分:
1 int find(int l;int r) 2 { 3 int mid=(l+r)/2; 4 while(l+1<r) 5 { 6 if(mid==条件) return mid; 7 if(mid<条件) l=mid; 8 if(mid>条件) r=mid; 9 } 10 if(l==条件) return l; 11 if(r==条件) return r; 12 return -1;//没有满足条件的 13 }
静态链表:
1 struct node //静态链表 2 { 3 int v,n; 4 }a[maxn]; 5 int top; 6 void cha_ru(int x,int y) //把y查到第x个元素后 7 { 8 top++; 9 a[top].v=y; 10 a[top].n=a[x].n; 11 a[x].n=top; 12 } 13 void delet(int x) //把x的下一个元素删除 14 { 15 a[x].n=a[a[x].n].n; 16 }
栈:
1 int q[maxn],top=0; 2 void push(int x) 3 { 4 q[++top]=x; 5 } 6 int pop() 7 { 8 return q[top--]; 9 }
队列:
1 int q[maxn],tail=0,head=0; 2 void push(int x) 3 { 4 q[++tail]=x; 5 } 6 int pop() 7 { 8 return a[++head]; 9 }
二叉树:
1 struct node //树 2 { 3 int v; 4 int lc,rc; 5 int id; 6 int pa; 7 }a[maxn]; 8 int top=0; 9 int head=0; 10 void qian(int p) //前序遍历 11 { 12 if(p==0) 13 return ; 14 cout<<a[p].v; 15 qian(a[p].lc); 16 qian(a[p].rc); 17 } 18 void zhong(int p) //中序遍历 19 { 20 if(p==0) 21 return ; 22 zhong(a[p].lc); 23 cout<<a[p].v; 24 zhong(a[p].rc); 25 } 26 void hou(int p) //后序遍历 27 { 28 if(p==0) 29 return ; 30 hou(a[p].lc); 31 hou(a[p].rc); 32 cout<<a[p].v; 33 } 34 //树的数组储存 35 //设有n各节点的树,操作t节点 根节点为1 到n 36 t.father=t/2; //父亲 37 t.lchild=2*t; //左儿子 38 t.rchild=2*t+1; //右儿子 39 t.lbrother=t-1; //左兄弟 40 t.rbrother=t+1; //右兄弟
并查集:
1 using namespace bing_cha_ji //并查集 2 { 3 int fa[maxn]; 4 for(int i=1;i<=n;i++) 5 fa[i]=i; 6 int getfa(int k) //找爹 7 { 8 if(fa[k]==k) return k; 9 fa[k]=get(fa[k]); 10 return fa[k]; 11 } 12 void merge(int x,int y) //合并 13 { 14 int fx=getfa(x); 15 int fy=getfa(y); 16 fa[fx]=fy; 17 } 18 bool judge(int x,int y) //判断是否为一个祖先 19 { 20 int fx=getfa(x); 21 int fy=getfa(y); 22 return fx==fy; 23 } 24 }