HDU6215 Brute Force Sorting 【模拟】
来源:互联网 发布:warframe对网络要求 编辑:程序博客网 时间:2024/06/05 05:28
传送门
显然 当[l,r]被删除后,下一轮可能删除的位置必定是从l-1或r+1开始
每删除一个值,将其左右边的值放进队列,用一个数组标记是否被删除过,避免重复操作即可
#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair<ll,ll>#define MEM(a,x) memset(a,x,sizeof(a))#define lowbit(x) ((x)&-(x))using namespace std;const int INF = 1e9+7;const int inf=INF;const int N = 100000 + 5;struct S{ int pre,val,nxt,idx;};list<S>ls;deque<pair<list<S>::iterator,int> >que;int del[N];void update(list<S>::iterator it){ auto preIt=it,nxtIt=it; if(it==ls.begin()){ it->pre=0; } else{ --preIt; it->pre=preIt->val; } ++nxtIt; it->nxt=(nxtIt==ls.end()?inf:nxtIt->val);}void init(int n){ ls.clear(); que.clear(); fill(del,del+n+1,0); for(int i=1;i<=n;++i){ int x; scanf("%d",&x); ls.push_back({0,x,0,i}); }}bool toDel(list<S>::iterator it){ return (it->pre>it->val)||(it->val>it->nxt);}void delIt(list<S>::iterator it){ del[it->idx]=1; if(it!=ls.begin()){ auto tmp=it; --tmp; que.push_back({tmp,tmp->idx}); } auto tmp=it; ++tmp; if(tmp!=ls.end()){ que.push_back({tmp,tmp->idx}); } ls.erase(it);}void slove(){ for(auto it=ls.begin();it!=ls.end();++it){ que.push_back({it,it->idx}); } while(!que.empty()){ int num=que.size(); for(int i=0;i<num;++i){//更新pre,nxt auto it=que[i].first; int idx=que[i].second; if(!del[idx]){ update(it); } } for(int i=0;i<num;++i){//删除未排序部分 auto it=que[i].first; int idx=que[i].second; if(!del[idx]&&toDel(it)){ delIt(it); } } for(int i=0;i<num;++i){ que.pop_front(); } } printf("%d\n",(int)ls.size()); for(auto s:ls){ printf("%d ",s.val); } putchar('\n');}int main(){ //freopen("/home/lu/code/r.txt","r",stdin); //freopen("/home/lu/code/w.txt","w",stdout); int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); init(n); slove(); } return 0;}
阅读全文
0 0
- HDU6215 Brute Force Sorting 【模拟】
- hdu6215 Brute Force Sorting 链表模拟
- hdu6215 Brute Force Sorting 模拟题+想法题
- hdu6215—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
- hdoj 6215 Brute Force Sorting
- HDU 6215 2017Brute Force Sorting 青岛网络赛 队列加链表模拟
- Brute Force Sorting 链表\模拟 [2017 ACM/ICPC Asia Regional Qingdao Online]
- HDU 6215 Brute Force Sorting [链表]
- HDU 6215 Brute Force Sorting [链表]
- Hdu 6215 Brute Force Sorting【链表】
- hdu 6215 Brute Force Sorting 【链表+队列】
- 万年历的编写
- android多线程-AsyncTask之工作原理深入解析(下)
- C++中类的对象和指针的区别理解
- 关于Spring Jackson 反序列化Date时遇到的问题
- C语言——字符串指针-strcmp
- HDU6215 Brute Force Sorting 【模拟】
- dubbo的使用及配置
- tarjan算法求割点
- 新阶段,勇攀高峰!
- android stdio 之 jdk1.8
- 序列化、反序列化:serializable
- Android 之 Handler ,Looper机制详解
- 【MySQL】RHEL 6.5系统下安装MySQL 5.6.37(rpm方式)
- matlab2015中安装VLFeat库