HDU6375双端队列

要点分析:

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 }

相关文章

一.C语言中的static关键字 在C语言中,static可以用来修饰局...
浅谈C/C++中的指针和数组(二) 前面已经讨论了指针...
浅谈C/C++中的指针和数组(一)指针是C/C++...
从两个例子分析C语言的声明 在读《C专家编程》一书的第三章时...
C语言文件操作解析(一)在讨论C语言文件操作之前,先了解一下...
C语言文件操作解析(三) 在前面已经讨论了文件打开操作,下面...