码迷,mamicode.com
首页 > 其他好文 > 详细

关于数据结构

时间:2017-07-18 22:11:07      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:启发式   pop   top   get   线段   push   abd   线段树   合并   

单调队列

code by zhx

void dandiao() {
    int front=1,tail=0;
    for (int a=1;a<=k;a++)
    {
        while (tail>=front && z[a]<q[tail][0])
            tail--;
        tail++;
        q[tail][0]=z[a];q[tail][1]=a;
    }

    for (int a=k+1;a<=n;a++)
    {
        while (tail>=front && z[a]<q[tail][0])
            tail--;
        tail++;
        q[tail][0]=z[a];q[tail][1]=a;
        if (q[front][1]==a-k) front++;
    }
}

   手写队列+手写 栈:

 stack:

class stack {
    int size=0,s[10000];
    void enque(int x) { s[++size]=x;}
    void deque() { size--;}
    bool empty() { return size!=0;}
    int front() { return s[size];
}

队列:

class queue {
    int front=1,tail=0,q[10000];
    void enque(int x) { q[++tail]=x;}
    void deque() { front++;}
    bool empty() { return front>tail;}
    int front1() { return q[front];
}

STL:中的priority_queue

priority_queue<int> heap;

heap.push(-x);//logn
heap.pop();//logn
heap.top();//1
heap.size();//1
heap.empty();//1

 

并查集,启发式合并

把节点较少的合并到节点节点较多的上

是一种优化

void merge(int p1,int p2) {
    int f1=getf(p1);
    int f2=getf(p2);
    if (f1!=f2) {
        if (size[f1]>size[f2]) swap(f1,f2);
        f[f1]=f2;
        size[f2]+=size[f1];
    }
}

 

杂七杂八的线段树

code by zhx

技术分享线段树

 

关于数据结构

标签:启发式   pop   top   get   线段   push   abd   线段树   合并   

原文地址:http://www.cnblogs.com/sssy/p/7202827.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!