HDU 6215 2017Brute Force Sorting 青岛网络赛 队列加链表模拟
来源:互联网 发布:485接口数据交换 编辑:程序博客网 时间:2024/06/05 09:24
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6215
题意:给你长度为n的数组,定义已经排列过的串为:相邻两项a[i],a[i+1],满足a[i]<=a[i+1]。我们每次对当前数组删除非排序过的串,合并剩下的串,继续删,直到排序完成。
解法:双向链表模拟过程,设置一个队列,用于存可能产生非排序过的串的头结点,每次从队列中拿出一个头结点判断后面的情况,若还能继续删除,则将头结点的上一个结点放入队列继续判,知道没有别的结点为止。
#include<bits/stdc++.h>using namespace std;const int maxn=1e5+1e3;int n, a[maxn];int pre[maxn], nxt[maxn], vis[maxn];vector<int> V;void del(int p) { nxt[pre[p]] = nxt[p]; pre[nxt[p]] = pre[p]; if(nxt[p] != n + 1 && !vis[nxt[p]] && pre[p] != 0 && a[pre[p]] > a[nxt[p]]) { V.push_back(nxt[p]); V.push_back(pre[p]); }}void read(){ scanf("%d", &n); for(int i = 1; i <= n; ++i)scanf("%d", a+i); for(int i = 1; i <= n; ++i)pre[i] = i - 1,nxt[i] = i + 1; for(int i = 1; i <= n; ++i) vis[i] = 0; V.clear(); for(int i = 1; i < n; ++i) if(a[i] > a[i + 1]) { V.push_back(i); V.push_back(i + 1); } sort(V.begin(), V.end()); V.erase(unique(V.begin(), V.end()), V.end());}vector<int> ans;void solve(){ while(!V.empty()) { for(int i=0;i<V.size();i++)vis[V[i]] = 1; vector<int> tmp = V; V.clear(); for(auto v: tmp)del(v); sort(V.begin(), V.end()); V.erase(unique(V.begin(), V.end()), V.end()); } ans.clear(); for(int i = 1; i <= n; ++i) if(!vis[i]) ans.push_back(i); printf("%d\n", (int)ans.size()); for(int i = 0; i < ans.size(); ++i) { printf("%d ", a[ans[i]]); } puts("");}int main() { int T; scanf("%d",&T); while(T--) { read(); solve(); } return 0;}
阅读全文
0 0
- HDU 6215 2017Brute Force Sorting 青岛网络赛 队列加链表模拟
- 【2017青岛网络赛】1010 hdu 6215 Brute Force Sorting 双向链表+队列
- 2017ICPC青岛网络赛 Brute Force Sorting
- HDU 6215 Brute Force Sorting 链表 + 队列(模拟)
- hdu 6215 Brute Force Sorting 【链表+队列】
- HDU 6215 Brute Force Sorting 模拟
- HDU 6215 Brute Force Sorting
- hdu 6215 Brute Force Sorting
- hdu 6215 Brute Force Sorting
- hdu 6215 Brute Force Sorting 模拟链表
- HDU-6215 Brute Force Sorting(思维、模拟链表)
- HDU 6215 Brute Force Sorting [链表]
- HDU 6215 Brute Force Sorting [链表]
- Hdu 6215 Brute Force Sorting【链表】
- HDU 6215 Brute Force Sorting【双端链表】
- HDU6215 Brute Force Sorting 【模拟】
- hdoj 6215 Brute Force Sorting
- HDU 6215 Brute Force Sorting (链表维护数组)
- 连接池每隔8小时候后出现连接超时
- 数组与矩阵---数组中子数组的最大累乘积
- hdu3065 病毒侵袭持续中(AC自动机)
- notepad++ 快捷键大全、notepad常用快捷键
- Mybatis入门学习(四)
- HDU 6215 2017Brute Force Sorting 青岛网络赛 队列加链表模拟
- JavaScript结合ArcGIS地图服务实现的搜索建议框
- SparseArray不适合数据量大的情况的原因
- Course Schedule ii
- 没有拿得出手的项目, 如何在面试/简历中为自己加分?
- 将学生的姓名成绩输入到Map中
- Matlab 画好图以后--再获取图中数据并保存
- MySql 5.7 my.ini 位置(my.ini)在哪?
- golang 中fmt用法