原文发表于2018-04-15 08:15:09,我的luogu博客qwq。

看到题以后,要求维护一个可在任意位置修改添加删除元素的序列,那么显然我们可以用到链表。

然而本蒟蒻不久前刚刚学会链表。链表也是线性结构,和数组比较,它的物理内存不连续,逻辑内存连续。数组在任意位置插入删除元素效率极差,链表就很棒了。

下面是给和我一样蒟的老哥们。

链表通常用结构体存储,一个节点有三个值,前驱、后继、权值。

链表初始化

 int init()
{
tot=;
head=;tail=;
node[head].next=tail;
node[tail].pre=head;
}

在p后插入新节点 注意是在后

 void insert(int p,int r)//插在p的后面
{
q=++tot;
node[q].val=r;
node[node[p].next].pre=q;
node[q].next=node[p].next;
node[p].next=q;
node[q].pre=p;
}

删除一节点

 void remove(int p)
{
node[node[p].pre].next=node[p].next;
node[node[p].next].pre=node[p].pre;
}

这些是链表的基本操作。

这道题需要有一些变动。

由于每个人按号依次进入,所以val值就是本身的序号。

由于可以向左插也可以向右插,写这句的时候要有一些改动。向右直接插,向左需要向 向左插的节点的前驱插。

最后输出尤为注意。不能输出权值!具体见代码。

code

 #include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,q,tmp,rp;
int tot=;
int head;
bool b[];
struct linkb{
int val;
int pre,next;
}node[];
void insert(int p,int r)//插在p的后面
{
q=++tot;
node[q].val=r;
node[node[p].next].pre=q;
node[q].next=node[p].next;
node[p].next=q;
node[q].pre=p;
}
void remove(int p)
{
node[node[p].pre].next=node[p].next;
node[node[p].next].pre=node[p].pre;
}
int main()
{
b[]=;node[].val=;
node[].next=;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int x=,y=;
scanf("%d%d",&x,&y);
b[i]=;
if(y==)
{
insert(x,i);
}
else if(y==)
{
insert(node[x].pre,i);
}
}
scanf("%d",&m);
for(int i=;i<=m;i++)
{
int x=;
scanf("%d",&x);
if(b[x]==) continue;
b[x]=;
rp++;
remove(x);
}
head=node[].next;
//printf("%d ",node[head].val);
tmp=head;
for(int i=;i<=n-rp;i++)
{
printf("%d ",node[tmp].val);
tmp=node[tmp].next;
}
printf("\n");
return ;
}

最新文章

  1. css 垂直居中
  2. hdu 5944 Fxx and string
  3. 解决java.lang.SecurityException: Access to default session denied
  4. HDU 4870 Rating 概率DP
  5. 日志:slf4j+log4j+maven配置
  6. MySQL外键约束On Delete、On Update各取值的含义
  7. hdoj 1556 Color the ball【线段树区间更新】
  8. C++ STD inner_product函数
  9. 《Effective C#》读书笔记-1.C# 语言习惯-2.使用运行时常量(readonly)而不是编译时常量(const)
  10. CCF系列之最优灌溉(201412-4)
  11. day05 Servlet 开发和 ServletConfig 与 ServletContext 对象
  12. Linux学习之路3-HelloWorld
  13. Vue route的使用
  14. oracle数据库误删的表以及表中记录的恢复
  15. 神经网络中w,b参数的作用(为何需要偏置b的解释)
  16. Week 1 工程文档
  17. Elasticsearch日志分析系统
  18. Entity Framework框架 (一)
  19. Node.js实战(七)之交互式解释器
  20. openwrt lamp

热门文章

  1. zookeeper客户端
  2. django 简易博客开发 1 安装、创建、配置、admin使用
  3. js:简单的拖动效果
  4. 在linux命令行中编译和运行java文件
  5. C#中泛型方法与泛型接口 C#泛型接口 List&lt;IAll&gt; arssr = new List&lt;IAll&gt;(); interface IPerson&lt;T&gt; c# List&lt;接口&gt;小技巧 泛型接口协变逆变的几个问题
  6. REST技术第四步 多个參数注解问题
  7. ecshop广告宽度值必须在1到1024之间的解决方法
  8. 【iOS系列】-UITableViewCell的展开与收缩的实现思路
  9. Xcode The identity used to sign the executable is no longer valid. 错误解决
  10. 常用的Sublime Text插件及安装方法