关于数据结构

单调队列

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

线段树

 

posted @ 2017-07-18 21:32  zzzzx  阅读(134)  评论(0编辑  收藏  举报