GCD:

1 int gcd(int a,int b)
2 {
3     return b==0?a:gcd(b,a%b);
4 }
View Code

 

快速幂:

 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 }
View Code

 

归并排序:

 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 }
View Code

 

二分:

 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 }
View Code

 

静态链表:

 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 }
View Code

 

栈:

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 }
View Code

 

队列:

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 }
View Code

 

二叉树:

 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;    //右兄弟
View Code

 

并查集:

 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 }
View Code