http://acm.hdu.edu.cn/showproblem.php?pid=6215

题意:
给出一个序列,对于每个数,它必须大于等于它前一个数,小于等于后一个数,如果不满足,就删去。然后继续去判断剩下的数,直到最后都满足。

思路:

建立双向链表,如果一个数是需要删除的,那么它只会影响它前一个的数和后一个的数,这样只需要把它前面的数保存下来,下次再跑即可。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,ll> pll;
const int INF = 0x3f3f3f3f;
const int maxn = +; int n ,top;
int a[maxn],pre[maxn],nxt[maxn];
int que[maxn]; template <class T>
inline void scan_d(T &ret)
{
char c;
ret = ;
while ((c = getchar()) < '' || c > '');
while (c >= '' && c <= '')
{
ret = ret * + (c - ''), c = getchar();
}
} int main()
{
//freopen("in.txt","r",stdin);
int T;
scan_d(T);
while(T--)
{
top=;
scan_d(n);
for(int i=;i<=n;i++)
{
scan_d(a[i]);
pre[i]=i-;
nxt[i]=i+;
que[top++]=i;
}
a[]=,a[n+]=INF;
nxt[]=,pre[n+]=n;
bool flag = true;
int ans = n;
while(flag)
{
int s = ;
flag = false;
int now = ;
while(now<top)
{
int cnt = ;
int it = que[now];
while(a[it]>a[nxt[it]]) {cnt++;it=nxt[it];flag=true;}
if(cnt)
{
ans-=(cnt+);
nxt[pre[que[now]]]=nxt[it];
pre[nxt[it]]=pre[que[now]];
que[s++]=pre[que[now]];;
}
while(que[now]<=it && now<top) now++;
}
top=s;
}
printf("%d\n",ans);
for(int i=;nxt[i]!=n+;i=nxt[i])
printf("%d ",a[nxt[i]]);
printf("\n");
}
return ;
}

最新文章

  1. UVA 1151 买还是建(最小生成树)
  2. 关于大型网站技术演进的思考(十三)--网站静态化处理—CSI(5)
  3. 实现BaseFragment
  4. WindowsService 创建.安装.部署
  5. Cannot find class for bean with name &#39;/hello&#39; defined in ServletContext resource
  6. Git 放弃修改
  7. A Round Peg in a Ground Hole(凸包应用POJ 1584)
  8. Mysql 字符串处理函数
  9. HTML与CSS入门——第三章 理解HTML和XHTML的关系
  10. 面试之get和post(转)
  11. C#使用xpath找到一个节点
  12. Jenkins 学习笔记
  13. C# 如何合并Excel工作表
  14. python接口自动化(二十二)--unittest执行顺序隐藏的坑(详解)
  15. Dubbo 源码解析四 —— 负载均衡LoadBalance
  16. vue-area-linkage Vue省市区三级列表联动插件使用
  17. WebConfig配置讲解
  18. PHP 博客收集
  19. JavaScript生成GUID的方法
  20. 解决oracle和plsql乱码问题

热门文章

  1. python中的作用域以及内置函数globals()-全局变量、locals()-局部变量
  2. Linux基础命令---检查密码文件pwck
  3. 新服务器上装java PHP环境有什么一键安装的方便的方法?一般都是怎么安装环境的?
  4. JDBC-day02
  5. java中避免乱码
  6. Python基础二_操作字符串常用方法、字典、文件读取
  7. 利用vue写一个复选框的组件
  8. python基础:re模块匹配时贪婪和非贪婪模式
  9. fjwc2019 D1T3 不同的缩写(dinic+trie+dfs)
  10. JDK常用命令(三)jmap