1 条题解
-
0
自动搬运
来自洛谷,原作者为

attack
**搬运于
2025-08-24 21:41:30,当前版本为作者最后更新于2017-06-17 21:16:22,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
第一次用到二维队列
用last来表示每一个小组内元素出现的顺序
q队列表示每一个小组出现的顺序
我们想一下,如果一个元素所属的小组在之前出现过
那么我们直接加到last队列里就好
这样可以保证按照小组的顺序输出
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<queue> using namespace std; int read(int & n) { char c='.';int x=0,flag=0; while(c<'0'||c>'9') { c=getchar(); if(c=='-')flag=1; } while(c>='0'&&c<='9') { x=x*10+(c-48); c=getchar(); } if(flag==1)n=-x; else n=x; } const int MAXN=10000001; queue<int>q,last[301]; int group[MAXN]; int main() { int n,m,p,meiyong; read(n);read(meiyong); for(int i=0;i<n;i++) read(group[i]); read(m); for(int i=1;i<=m;i++) { string s; cin>>s; if(s=="push") { read(p); if(last[group[p]].empty()) q.push(group[p]); last[group[p]].push(p); } else { printf("%d\n",last[q.front()].front()); last[q.front()].pop(); if(last[q.front()].empty()) q.pop(); } } return 0; }
- 1
信息
- ID
- 2693
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者