帝都Day4(2)——数据结构

 

 

黄姓dalao is coming!

一、栈:

基本常识略。

例题:铁轨

模拟,O(n),

Usaco2006 Nov

题目略

做法:单调栈(续命栈?)

n//数量
a[]//奶牛
for(int i=1 to n)
{
    for(;a[i]>a[stack[top]]&⊤top--);//把所有比他小的元素删掉
    c[i]=i-stack[top]-1;//这个数和栈顶的数距离
    ans+=c[i];//加答案
    stack[++top]=i;
}

 JSOI2008 最大数

m 操作数
n 数列长度
a[]
while(m--)
{
    if(t==1)//加入操作
    {
        a[++n]=x;
        for(;a[n]>=stack[top]&⊤top--);
        stack[++top]=n;
    }
    else//询问操作
    {
        s=n-x;
        printf("%d\n",a[stack[upper_bound(stack+1,stack+top+1,s)=stack]]);
    }
}

 二、队列

常识略

插入删除O(1) 空间复杂度O(n)

滑动的窗户

修剪草坪

三、链表

插入、删除O1 查询On

乱发节那道题(NOIP不怎么考链表啊)

n

a[]

bool cmp(int x,int y){return a[x]==a[y]?x>y:a[x]<a[y];}

for(i=1;i<=n;i++)

{

    left[i]=i-1;

    right[i]=i+1;

    b[i]=i;

sort(b+1,b+n+1,cmp);

for(i=1;i<=n;i++)

{

    c[i]=left[b[i]];

    right[left[b[i]]]=left[b[i]];

    left[right[b[i]]]=right[b[i]];

}

四、并炸鸡(并查集)

略,题目:

洛谷P1621 集合

枚举>=p的所有在[A,B]中的倍数,合并。复杂度O(nlog2n*n的反阿克曼)

洛谷P2170 玄学霸——南小鸟(选学霸)

 洛谷P1197 JSOI2008 星球大战

先算出来炸完之后剩余的,然后倒过来做。

洛谷P2024 食物链 加权并查集

0 同一物种 1 吃 2 被吃

五、堆

堆为一颗二叉树,满足以下两个性质

五.1、二叉堆

二叉堆是一颗完全二叉树 插入 删除 求最小值

用数组表示 节点n儿子 2n 2n+1

插入节点:放在末尾 向上更新

删除节点:把最后一节点放到要删除的地儿向下更新

还有一道是usaco的

还有一道bzoj2151 种树:

posted @ 2017-07-18 15:40  ghj1222  阅读(151)  评论(0编辑  收藏  举报