题意:给你长度为n的数组,定义已经排列过的串为:相邻两项a[i],a[i+1],满足a[i]<=a[i+1]。我们每次对当前数组删除非排序过的串,合并剩下的串,继续删,直到排序完成。

题解:用双向链表模拟删除过程即可。

具体细节见代码:

#include<cstdio>
#include<cstring>
#define N 200010
using namespace std;
int T,n,i,a[N],out[N],next[N],pre[N],r,pos[N],l;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
l=r=;
memset(pos,,sizeof(pos));
memset(out,,sizeof(out));
memset(next,,sizeof(next));
memset(pre,,sizeof(pre));
for(i=;i<=n;i++){
scanf("%d",&a[i]);
next[i]=i+;
pre[i]=i-;
if(a[i]<a[i-]){///标记第一次遍历所删除的数
if(!out[i-])pos[++r]=i-,out[i-]=;///r表示所删除的数的数量
pos[++r]=i;out[i]=;
}
}
for(l=;l<=r;){
int rr=r;
for(i=l;i<=rr;i++){
next[pre[pos[i]]]=next[pos[i]];
pre[next[pos[i]]]=pre[pos[i]];///将pos[i]所表示的数删去
if(pre[pos[i]]==||next[pos[i]]==n+)continue;///遍历完毕
if(!out[next[pos[i]]]&&a[next[pos[i]]]<a[pre[pos[i]]]){///如果已经删除的数后面一个数并未被删除,且这一个数小于已经删除的数的前一个数,那么则删除它
if(!out[pre[pos[i]]])pos[++r]=pre[pos[i]],out[pre[pos[i]]]=;
pos[++r]=next[pos[i]];out[next[pos[i]]]=;
}
}
l=rr+;
}
printf("%d\n",n-r);
for(i=;i<=n;i++)
if(!out[i])printf("%d ",a[i]);puts("");
}
}

Brute Force Sorting(HDU6215)的更多相关文章

  1. hdu6215 Brute Force Sorting

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6215 题目: Brute Force Sorting Time Limit: 1000/100 ...

  2. HDU 6215 Brute Force Sorting(模拟链表 思维)

    Brute Force Sorting Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

  3. HDU - 6215 2017 ACM/ICPC Asia Regional Qingdao Online J - Brute Force Sorting

    Brute Force Sorting Time Limit: 1 Sec  Memory Limit: 128 MB 题目连接 http://acm.hdu.edu.cn/showproblem.p ...

  4. hdu6215 Brute Force Sorting(模拟)

    题意 给一个长度为n(n<=1e5)的序列,如果一个位置i满足a[i-1]>a[i]或者a[i]>a[i+1],那么我们就称该位置是不合法的位置 先把序列中所有不合法的位置统一找出来 ...

  5. hdu 6215 -- Brute Force Sorting(双向链表+队列)

    题目链接 Problem Description Beerus needs to sort an array of N integers. Algorithms are not Beerus's st ...

  6. HDU 6215 Brute Force Sorting(链表)

    http://acm.hdu.edu.cn/showproblem.php?pid=6215 题意:给出一个序列,对于每个数,它必须大于等于它前一个数,小于等于后一个数,如果不满足,就删去.然后继续去 ...

  7. HDU 6215:Brute Force Sorting(链表+队列)

    题目链接 题意 给出一个长度为n的数组,每次操作都要删除数组里面非递增的元素,问最终的数组元素有什么. 思路 容易想到用链表模拟删除,但是不能每次都暴力枚举,这样复杂度O(N^2).想到每次删除元素的 ...

  8. hdu 6215 Brute Force Sorting(模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6215 题解:类似双链表的模拟. #include <iostream> #include ...

  9. HDU 6215 Brute Force Sorting 模拟双端链表

    一层一层删 链表模拟 最开始写的是一个一个删的 WA #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) mem ...

随机推荐

  1. learning scala ide tools install

    reference : https://www.jetbrains.com/help/idea/install-and-set-up-product.html env in ubuntu 16.04 ...

  2. 微信和支付宝支付模式详解及实现(.Net标准库)

    支付基本上是很多产品都必须的一个模块,大家最熟悉的应该就是微信和支付宝支付了,不过更多的可能还是停留在直接sdk的调用上,甚至和业务系统高度耦合,网上也存在各种解决方案,但大多形式各异,东拼西凑而成. ...

  3. @ResponseBody中文乱码解决方案

    java web项目,使用了springmvc4.0,用@ResponseBody返回中文字符串,乱码$$ 本以为很简单的问题,不过也找了一个小时. 网上有说这样配置的: <mvc:annota ...

  4. commons-logging,log4j和jdklog的调用方式

    commons-logging包含log4j和jdklog. commons-logging: Log log= LogFactory.getLog(getClass());//commons log ...

  5. 生产者与消费者问题,C++利用bind基于对象实现与面向对象实现

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  6. Java学习笔记整理第一章 java基本数据类型、修饰符、运算符

    Java关键字: Java关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量.Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的 ...

  7. AOP 实现请求参数打印

    1.编写打印方法 import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import org.aspe ...

  8. innodb mvcc,事务隔离级别,读写锁

    mvcc其实和copyonwritelist的思路差不多:读不加锁,写加锁,事务提交之后释放锁,并且延伸的是,在UNdolog里面保存了几个版本,实现不同的隔离级别.如果读数据页里面最新的数据,那么就 ...

  9. ylz 开发学习笔记一(注意事项)

    Eclipse快捷键 断点 F6执行下一步 等等 C+S+R 搜索文件名字      C+鼠标移动左击 跳入类文件    jsp 文件的断点是使用 debugger  之后再chrom 用F10单步调 ...

  10. 2019-04-02-day024-内置方法

    昨日回顾 反射 用"字符串"类型的属性名/方法名来找到 属性的值或者方法的内存地址 所有可以反射的内容实际上都是变量 有内存地址 内存地址存的是"具体的值",直 ...