題意是有至多150000個雙端佇列,400000次簡單操作,直接開會導致記憶體超限,所以用 stl 中的 map 和 deque ,而讀入過大已經在題目中有所說明,直接用已經給出的快速讀入即可。要注意的是在兩個佇列合併時,要用 insert 函式,直接乙個乙個操作會超時(自己對雙端佇列的 stl 還是不夠熟悉......)**如下:
1 #include 2view codeusing
namespace
std;
3const
int n = 150005
;4 map >q;
5void read(int &x)
10int
main()
1128
else
if(a == 2)29
37if(w == 0)38
42else
if(w == 1)43
47}48else
if(a == 3)49
58else
if(w == 1)59
63}64}
6566}67
return0;
68 }
一般來說 stl 用法簡單,但是其中會帶有許多與題目本身無關的功能,而用時也就會多出很多,用陣列去模擬一些 stl 中的標準模板可以大幅減少不必要的耗時,本題中手寫的雙端佇列用時不到用 stl 的一半,**如下:
1 #include2view codevoid read(int &x)
7struct
record
8stack1[500010
];13
intcnt;
14class
listqueue
1529
else
30 puts("-1"
);31}32
bool
empty()
3336
void
shift()
3747
else
48 puts("-1"
);49}50
void
clear()
5154
void unshift(int
n)55
66void push(int
n)67
7879
89 tail =v.tail;
90v.clear();91}
92}93void
reverse()
94104 temp1 = temp->next;
105 temp->next = temp->pre;
106 temp->pre =temp1;
107 head =tail;
108 tail =temp;
109}
110 }rec[150100
];111
intmain()
112122
while(q--)
123135
else
if(type == 2
)136
144else
145153
}154
}155
return0;
156 }
hdu6375 雙端佇列
problem description 度度熊正在學習雙端佇列,他對其翻轉和合併產生了很大的興趣。初始時有 n 個空的雙端佇列 編號為 1 到 n 你要支援度度熊的 q 次操作。1 u w val 在編號為 u 的佇列裡加入乙個權值為 val 的元素。w 0 表示加在最前面,w 1 表示加在最後面 ...
度度熊學佇列 HDU 6375
度度熊正在學習雙端佇列,他對其翻轉和合併產生了很大的興趣。初始時有 nn 個空的雙端佇列 編號為 11 到 nn 你要支援度度熊的 qq 次操作。11 uu ww valval 在編號為 uu 的佇列裡加入乙個權值為 valval 的元素。w 0w 0 表示加在最前面,w 1w 1 表示加在最後面 ...
度度熊學佇列 HDU 6375
度度熊正在學習雙端佇列,他對其翻轉和合併產生了很大的興趣。初始時有 nn 個空的雙端佇列 編號為 11 到 nn 你要支援度度熊的 qq 次操作。11 uu ww valval 在編號為 uu 的佇列裡加入乙個權值為 valval 的元素。w 0w 0 表示加在最前面,w 1w 1 表示加在最後面 ...