非单调队列
来源:互联网 发布:人工智能的股票有哪些 编辑:程序博客网 时间:2024/06/05 21:49
维护一个队列。
1、将一个整数插入到队尾;
2、从队头删除一个数,如果队列为空则忽略;
3、将队列中所有的数字变成其相反数;
4、输出队列中的最大值,如果队列为空不输出;
#include<cstdio>#include<cstring>#include<string.h>#include<algorithm>#include<iostream>#include<math.h>#include<vector>using namespace std;const int maxn=2000000;const int inf=0x80000000;struct myqueue{struct value{int pos;int value;}val[maxn];int vhead,vtail;int head,tail;void push(int x){while(vtail>vhead&&val[vtail-1].value<=x)vtail--;val[vtail].value=x;val[vtail].pos=tail;tail++;vtail++;}void pop(){if(vhead<vtail&&val[vhead].pos==head){vhead++;}if(head<tail)head++;}int Max(){if(vhead==vtail)return inf;elsereturn val[vhead].value;}void init(){head=tail=vhead=vtail=0;}}q[2];int main(){int tc,tt;char cmd[10];int arg;int ans;int n;int pos,neg;scanf("%d",&tc);for(tt=0;tt<tc;tt++){pos=0;neg=1;if(tt>0)printf("\n");q[0].init();q[1].init();scanf("%d",&n);for(int i=0;i<n;i++){scanf("%s",cmd);if(strcmp(cmd,"PUSH")==0){scanf("%d",&arg);q[pos].push(arg);q[neg].push(-arg);}else if(strcmp(cmd,"POP")==0){q[pos].pop();q[neg].pop();}else if(strcmp(cmd,"MINUS")==0){pos=neg;neg=1-pos;}else{ans=q[pos].Max();if(ans!=inf)printf("%d\n",ans);}}}return 0;}from sysuoj.
阅读全文
0 0
- 非单调队列
- 单调队列—非负和
- 单调栈 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- Drawable学习之---TransitionDrawable
- **win10+loadrunner12基础教程**
- javascript定时器做一个又快到慢的点名/抽奖效果
- webpack使用笔记(一)
- Struts2之ModelDriven接口实现登陆及退出
- 非单调队列
- html li标签前面添加图标三种方法
- AlertDialog样式
- 文件上传并且把文件名字保存到数据库(java+js代码)
- 纯JS实现页面滚动至顶部并自动显示或隐藏
- spring security3 配置使用注解
- Kotlin Reference (九) 抽象类、密封类
- HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (一)
- bat脚本执行带参数的sql指令(sql server)