HDU6375双端队列
发布时间:2021-07-06 05:28:34 所属栏目:大数据 来源: https://www.cnblogs.com/YLTFY
导读:要点分析: 1.本题可以使用C++STL中的deque双端队列来方便解决(底层是一个双向的链表) 2.值得注意的是N的上限为150000,所以直接开这么大的空间会超内存,可以配合map一起使用 关于双端队列的声明: 使用queue头文件 主要用法: deque.push_back(val); deq
要点分析: 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(-1n"); 38 }39 40 int temp = q[u].front(); 41 q[u].pop_front(); 42 printf(%dn,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 } (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |