論避免手寫堆的各種姿勢 1

2021-09-07 08:36:02 字數 2004 閱讀 8109

插入,刪除,取最小

方法0:stl 優先佇列

1198ms

#include#include

#include

#include

using

namespace

std;

inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}int

n,op;

priority_queue

, greater >q;

intmain()

}

view code

方法1:algorithm庫 heap系列函式

520ms 這個數字.....

make_heap(begin,end,cmp) 建堆 前閉後開    cmp定義《運算,可選 注意同樣是預設大根堆

push_heap(begin,end,cmp) 插入 前閉後開 插入最後乙個元素

pop_heap(begin,end,cmp) 刪除 把堆頂元素放到最後乙個位置

#include #include 

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int n=1e6+5

;inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}int

n,op,x;

int a[n],len=0

;inline

bool cmp(int a,int b)

intmain()

else

if(op==2) printf("

%d\n

",a[1

]);

else pop_heap(a+1,a+1+len,cmp),len--;}}

view code

方法2:pb_ds庫 

據說競賽可用

#include

using namespace __gnu_pbds; 

支援配對堆(pairing_heap)、二叉堆(binary_heap)、二項堆(binomial_heap)、冗餘計數二項堆(redundant-counter binomial_heap,沒找到通用譯名,故自行翻譯)、經改良的斐波那契堆(thin_heap)

使用方法:__gnu_pbds::priority_queue,pairing_heap_tag> q; 第三個引數換成想用的名稱就行了,預設配對堆

支援join操作,然而本文不考慮

pairing_heap_tag 428ms

binomial_heap 544ms

rc_binomial_heap 610ms

thin_heap_tag 790ms

結合wc課件中的測試,用預設的pairing就好了

#include #include 

#include

#include

#include

using

namespace

std;

using

namespace

__gnu_pbds;

inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}int

n,op,x;

__gnu_pbds::priority_queue

>q;

intmain()

}

view code

單例模式的各種姿勢

餓漢式 基於classloder機制避免了多執行緒的同步問題,不過,instance在類裝載時就例項化 public class singleton public singleton getinstance 懶漢式 public class singleton public static synch...

檔案上傳的各種繞過姿勢

做 ctf 的 web 方向常常遇到檔案上傳的題目,而且每題多少會有些不同。於是蒐集一番總結起來學習一下。前端會檢測字尾,可以先上傳乙個符合字尾的檔案,再用 burp 抓包修改檔案的內容以及字尾即可。gif89a php eval get a jsp jspx jspf asp asa cer as...

各種動漫情侶姿勢的畫法

大家都有閱讀過少女漫畫吧?本次我們將針對男女情侶的各種場景作畫,以及構圖營造 氛圍等要點進行解說。當然,只要掌握訣竅,也能應用於繪畫同性戀的情侶。男女的體格差 畫女性時,多用的是圓潤的線條,而男性則是直線和方形線條。簡化的畫,女性下半身是更大的梯形,而男性的上半身是乙個倒三角。順便說一下,對於頭部和...