两个单调队列代码
来源:互联网 发布:大数据技术应用 编辑:程序博客网 时间:2024/06/06 08:24
好久没写题解了,可耻啊可耻
POJ 2823 点击打开链接
FZOJ 1894 点击打开链接
POJ 2823
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cstdlib>#include<map>#include<queue>#include<vector>using namespace std;const int MAXN = 1000020;struct node{ int sq,val;}p[MAXN];int n,a[MAXN],k;int q[MAXN];void get_min(){ int front=0,rear=0; for(int i=1;i<k;i++) { while(rear>front&&p[i].val<p[q[rear-1]].val)rear--; q[rear++]=i; } for(int i=k;i<=n;i++) { while(rear>front&&p[i].val<p[q[rear-1]].val)rear--; q[rear++]=i; while(p[q[rear-1]].sq-p[q[front]].sq>=k)front++; printf("%d ",p[q[front]].val); } printf("\n");// while(rear>front&&p[n].val<p[q[rear-1]].val)rear--;// q[rear++]=n;// while(p[q[rear-1]].sq-p[q[front]].sq>=k)front++;// printf("%d\n",p[q[front]].val);}void get_max(){ int front=0,rear=0; for(int i=1;i<k;i++) { while(rear>front&&p[i].val>p[q[rear-1]].val)rear--; q[rear++]=i; } for(int i=k;i<=n;i++) { while(rear>front&&p[i].val>p[q[rear-1]].val)rear--; q[rear++]=i; while(p[q[rear-1]].sq-p[q[front]].sq>=k)front++; printf("%d ",p[q[front]].val); } printf("\n");// while(rear>front&&p[n].val>p[q[rear-1]].val)rear--;// q[rear++]=n;// while(p[q[rear-1]].sq-p[q[front]].sq>=k)front++;// printf("%d\n",p[q[front]].val);}int main(){ // freopen("2823.txt","r",stdin); while(scanf("%d%d",&n,&k)!=EOF) { for(int i=1;i<=n;i++){scanf("%d",&p[i].val);p[i].sq=i;} get_min(); get_max(); } return 0;}
FZOJ 1894
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cstdlib>#include<map>#include<queue>#include<vector>using namespace std;const int MAXN = 1000020;struct node{ int sq,val;}p[MAXN];int ic,RM_tar;int front,rear;int q[MAXN];void Add_person(){ char name[10]; scanf("%s%d",name,&p[ic].val); p[ic].sq=ic; while(rear>front&&p[ic].val>p[q[rear-1]].val)rear--; q[rear++]=ic++;}void Query(){ int ans; if(rear<=front)ans=-1; else ans=p[q[front]].val; printf("%d\n",ans);}void Remove_person(){ if(RM_tar>=q[front])front++; RM_tar++;}void solve(){ RM_tar = ic = front = rear = 0; bool end=false; char cmd[10]; scanf("%s",cmd); while(1) { scanf("%s",cmd); switch (cmd[0]) { case 'C':Add_person();break; case 'Q':Query();break; case 'G':Remove_person();break; case 'E':end=true;break; default :cout<<"Fuck you!!!!!!!"<<endl; } if(end)break; }}int main(){ freopen("fuzhou1893.txt","r",stdin); int T; scanf("%d",&T); while(T--) { solve(); } return 0;}
- 两个单调队列代码
- hud-3530-Subsequence-维护两个单调队列
- 单调栈 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- MySQL 5.5 安装报错问题汇总
- 建立社交圈交换经验、心得,以求自我进步
- js 实现 <input type="file" /> 文件上传
- 优秀的测试用例标准
- Java学习想法
- 两个单调队列代码
- 敌兵布阵
- C++的拷贝构造函数与赋值构造函数
- udp socket
- 九度笔记之 1364:v字仇杀队
- ext 进度条遮罩问题
- ROS Environment
- Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
- 做人准则:大方的人更容易受到别人的信任