HDU 6375 雙端佇列

2022-05-09 19:16:06 字數 1737 閱讀 1268

題意是有至多150000個雙端佇列,400000次簡單操作,直接開會導致記憶體超限,所以用 stl 中的 map 和 deque ,而讀入過大已經在題目中有所說明,直接用已經給出的快速讀入即可。要注意的是在兩個佇列合併時,要用 insert 函式,直接乙個乙個操作會超時(自己對雙端佇列的 stl 還是不夠熟悉......)**如下:

1 #include 2

using

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 }

view code

一般來說 stl 用法簡單,但是其中會帶有許多與題目本身無關的功能,而用時也就會多出很多,用陣列去模擬一些 stl 中的標準模板可以大幅減少不必要的耗時,本題中手寫的雙端佇列用時不到用 stl 的一半,**如下:

1 #include2

void 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 }

view code

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 表示加在最後面 ...