最新學習雙端佇列的用法。
#includeusing namespace std;
const int maxn = 2e5+10;
int num[maxn*2];
int l,r,t,cas;
dequeque;
int flag;
char str[15];
void init()
void push(int x)
else
}void pop()
else
}void re()
void nand()
if(que.empty())
else
else
}else
else}}
printf("%d\n",cnt&1);
return;
}void output()
int main()
else
}else if(str[0] == 'r')
else
//output();}}
return 0;
}
【一】想要提一下的知識點是雙端佇列的取兩端元素的函式是:
int x = que.back();//取尾部元素
int y = que.front();//取頭部元素
//其實返回的是引用,而引用正是變數的別名
【二】與非的性質
【a】0與非x和x與非0的結果都是1
【b】多個1與非的結果是(1的數量&1)
【c】根據上兩個知識點可以得到解題思路:我們只要找到離棧底最近的0的位置和棧底的位置就能計算出中間有多少1
從而根據【b】快速計算出結果
本題中由於棧頂和棧底可以相互轉化,造成棧底的位置不固定,因此需要記錄所有0的位置(利用乙個雙端佇列)
從而方便的找出來裡棧頂或者棧底最近的0的位置,從而求解
hdu6375 雙端佇列
problem description 度度熊正在學習雙端佇列,他對其翻轉和合併產生了很大的興趣。初始時有 n 個空的雙端佇列 編號為 1 到 n 你要支援度度熊的 q 次操作。1 u w val 在編號為 u 的佇列裡加入乙個權值為 val 的元素。w 0 表示加在最前面,w 1 表示加在最後面 ...
HDU 6375 雙端佇列
題意是有至多150000個雙端佇列,400000次簡單操作,直接開會導致記憶體超限,所以用 stl 中的 map 和 deque 而讀入過大已經在題目中有所說明,直接用已經給出的快速讀入即可。要注意的是在兩個佇列合併時,要用 insert 函式,直接乙個乙個操作會超時 自己對雙端佇列的 stl 還是...
HDU 6319 單調佇列 雙端佇列
原題 題意 乙個數列,1e7數量。對每個區間 i,i m 1 都有操作。操作要查詢該區間的最大值和該區間的最長的嚴格上公升的序列的長度。正這不好計算,倒著來比較好。用雙端的單調佇列維護資訊。倒著來的話,就把要加進來的數和隊尾比較,大於等於隊尾的話,說明隊尾那個數沒用了。隊頭就是區間的最大值,佇列長度...