HDU 6215 队列+链表
来源:互联网 发布:淘宝店开店流程 编辑:程序博客网 时间:2024/06/17 12:22
题意
不断从一个序列中删除下降子序列,直到不出现下降子序列。
题解
纯链表很容易TLE,需要用队列进行优化。处理的思想是这样子的,如果我们删除了某个下降子序列,那么就有可能存在下降子序列的前一个元素与后面的一些元素组合成一个下降子序列。因此我们需要将前一个元素加入队列,再加入队列前需要将链表进行删除操作。同时由于删除了一些元素,对应的队列中也应该将这些元素POP掉。为了防止将刚加入的元素POP掉,我们需要两个队列,一个保存新加入的元素,最后将这个新加入元素的队列的内容复制到处理队列中就可以了。
代码
#include<bits/stdc++.h>#define ll long long#define UP(i,l,h) for(int i=l;i<h;i++)#define W(t) while(t)#define MEM(a,b) memset(a,b,sizeof(a))#define MAXN 100010#define BUF 25001000#define INF 0x3f3f3f3fusing namespace std;char Buf[BUF],*buf=Buf;int val[MAXN],xnext[MAXN],before[MAXN];int cnt;void add(int w) { before[++cnt]=cnt-1; xnext[cnt]=cnt+1; val[cnt]=w;}queue<int> q,tmpq;int main() { int t; scanf("%d",&t); W(t--) { W(!q.empty()) q.pop(); cnt=-1; int n; scanf("%d",&n); add(0); UP(i,0,n) { int a; scanf("%d",&a); add(a); q.push(i); } add(INF); W(true) { W(!tmpq.empty()) tmpq.pop(); W(!q.empty()) { int x=q.front(); q.pop(); int last=val[x]; int y=xnext[x]; bool can=false; W(y!=cnt&&val[y]<last) { last=val[y]; y=xnext[y]; can=true; } if(can) { before[y]=before[x]; xnext[before[x]]=y; tmpq.push(before[x]); W(!q.empty()&&q.front()<y) { q.pop(); } } } if(tmpq.size()==0) break; W(!tmpq.empty()) q.push(tmpq.front()),tmpq.pop(); } int sz=0; int x=0; W(x!=cnt) { if(x!=0) sz++; x=xnext[x]; } printf("%d\n",sz); x=0; W(x!=cnt) { if(x!=0) printf("%d ",val[x]); x=xnext[x]; } puts(""); }}/*101210 11 12 98 4 5 9 2 3 1 4 5 45 73 67 43 2 1 4 5*/
阅读全文
0 0
- HDU 6215 队列+链表
- hdu 6215 Brute Force Sorting 【链表+队列】
- HDU 6215 Brute Force Sorting 链表 + 队列(模拟)
- HDU 6215 模拟链表 + 队列优化
- 【优先队列】【链表】【priority_queue】【list】hdu 1434
- Hdu 1387 Team Queue[队列 || 链表]
- HDU-1509 优先队列
- hdu 1506#单调队列
- hdu 4193#单调队列
- HDU 1104 BFS 队列
- hdu 4006 优先队列
- HDU 4193 单调队列
- hdu 2757 优先队列
- hdu 1059 优先级队列
- hdu 1873 优先级队列
- hdu 1896 优先级队列
- hdu 4006 优先级队列
- HDU 4006 优先队列
- python中的按位运算符——转 菜鸟教程
- get/post请求,以及参数传递过程中乱码问题
- android 获取连接WiFi的名称
- 莫比乌斯反演专题训练及解答总结
- 写给自己(当记事本就好)
- HDU 6215 队列+链表
- Java加载顺序
- 2017年,再次出发
- (Servlet)什么情况下调用doGet()和doPost()方法
- map 深度复制与浅复制的区别
- 手把手教你系列
- SVN重新更新或者提交时报错
- 各浏览器内核以及前缀
- BZOJ 2754: [SCOI2012]喵星球上的点名