要点分析:
1.本题可以使用C++STL中的deque双端队列来方便解决(底层是一个双向的链表)
2.值得注意的是N的上限为150000,所以直接开这么大的空间会超内存,可以配合map一起使用
关于双端队列的声明:
使用<queue>头文件
主要用法:
deque.push_back(val);
deque.push_front(val);
deque.pop_front();
deque.pop_back();
deque.front();
deque.back();
deque.clear();
本题代码:
1 #include<iostream> 2 #include<queue> 3 #include<map> 4 using namespace std; 5 6 //const int N = 150005; 7 map<int,deque<int> > q; 8 9 void read(int &x){ 10 char ch = getchar();x = 0; 11 for (; ch < '0' || ch > 9'; ch = getchar()); 12 for (; ch >=' && ch <= '; ch = getchar()) x = x * 10 + ch - '13 } 14 15 int main(){ 16 N,Q; 17 while(scanf("%d%d",&N,&Q) != EOF){ 18 for(int i = 1; i <= N; i++) q[i].clear(); 19 1; i <= Q; i++){ 20 x; 21 read(x); 22 if(x == 123 u,w,val; 24 read(u); 25 read(w); 26 read(val); 27 if(w == 28 q[u].push_front(val); 29 }else{ 30 q[u].push_back(val); 31 } 32 }else 233 34 35 36 if(q[u].empty()){ 37 printf(-1\n"); 38 }39 40 int temp = q[u].front(); 41 q[u].pop_front(); 42 printf(%d\n,temp); 43 }44 q[u].back(); 45 q[u].pop_back(); 46 printf(47 } 48 49 }50 51 52 read(v); 53 54 55 while(!q[v].empty()){ 56 q[v].front(); 57 q[v].pop_front(); 58 q[u].push_back(temp); 59 60 }61 62 q[v].back(); 63 q[v].pop_back(); 64 65 66 67 } 68 } 69 } 70 return 71 }
原文地址:https://www.cnblogs.com/YLTFY1998
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。