原创 【莫比烏斯反演】BZOJ2818 Gcd

題面在這裏 反演裸題不解釋 示例程序: #include<cstdio> #include<algorithm> using namespace std; typedef long long ll; const int maxn

原创 【二分+最小生成樹】BZOJ2654 tree

題面在這裏 其實非常簡單: 發現恰有need條邊很難控制,但是邊的優先級很好控制 所以考慮給每個白色邊加上某個權值 使得求最小生成樹時剛好取了need條邊 然後發現這個加上的權值與白色邊的條數剛好滿足單調 所以直接二分加上的權值就

原创 【lucas定理】BZOJ2982 combination

題面在這裏 不說了,直接lucas 示例程序: #include<cstdio> const int maxn=10010,MOD=10007; int tst,fac[maxn],inv[maxn]; void prepare

原创 【單調隊列】BZOJ 1047 [HAOI2007]理想的正方形

題面在這裏 很顯然可以使用單調隊列。 先只考慮正方形的行限制,處理出每個位置的最大/小值 然後對最大/小值再刷一次單調隊列,得到含有列限制的答案 示例程序: #include<cstdio> #include<algorithm>

原创 【DP】RQNOJ #107 Ural的鷹蛋實驗

題面在這裏 實在不懂爲什麼如此經典的題目只能在這種SBOJ上做…… 顯然可以這樣DP: fi,j 表示有i個蛋,要判斷j層樓的最少次數 枚舉在哪一層樓扔雞蛋 fi,j=Min{Max{fi−1,k−1,fi,j−k}+1}   

原创 【CDQ分治】BZOJ3295 [Cqoi2011]動態逆序對

題面在這裏 刪除操作一共有3個屬性:時間t,位置p,值x 考慮到一個元素僅在被刪除之前有貢獻 那麼只需要統計t<t′,p>p′,x<x′ 的三維偏序即可 CDQ分治解決t(注意是標記後半段爲有貢獻) 排序解決p,樹狀數組解決x 注意:1.

原创 【LCT】BZOJ2049 [Sdoi2008]Cave 洞穴勘測

題面在這裏 LCT模板題,沒什麼好說的 判斷是否聯通只需要判斷根是否相同即可 暴力往上找根是可行的,因爲樹的均攤深度是lognlogn 示例程序: #include<cstdio> #include<algorithm> using na

原创 【組合數學】BZOJ3505 [Cqoi2014]數三角形

題面在這裏 首先會發現直接算很難算 那麼就考慮計算三點共線的方案吧 由於兩直角邊分別爲a,b 的三角形,斜邊上整點數爲gcd(a,b)+1 然後中間點要共線就只有gcd(a,b)−1 種可能 然後把斜邊遍歷整個網格圖(n−a+1)⋅(n−

原创 【LCT維護生成樹】BZOJ3669 [Noi2014]魔法森林

題面在這裏 考慮枚舉a的最大值 那麼只需要讓1→n1→n 的最大值最小即可 這樣其實就是在做生成樹,若當前構成環,則刪去環中的最大邊 如果1到n聯通就更新答案了 具體實現可以按a排序,枚舉每條邊作爲最大邊 用LCT維護生成樹,其中最大值信

原创 【LCT】BZOJ2002 [Hnoi2010]Bounce 彈飛綿羊

題面在這裏 LCT模板題,支持join,cutjoin,cut 操作即可 示例程序: #include<cstdio> #include<algorithm> using namespace std; inline char nc(){

原创 【LCT】BZOJ2843 極地旅行社

題面在這裏 直接LCT就好了 示例程序: #include<cstdio> #include<algorithm> using namespace std; inline char nc(){ static char buf[10

原创 【CDQ分治】 BZOJ3262 陌上花開

題面在這裏 最經典的三維偏序問題 x用CDQ分治,y排序,z樹狀數組維護 示例程序: #include<cstdio> #include<algorithm> using namespace std; inline char nc(){

原创 【CDQ分治】BZOJ2683 簡單題

題面在這裏 把每個詢問操作Q分爲4個(容斥) 然後對於每個Q,要求出tA<tQ,xA≤xQ,yA≤yQ 的wA 之和 直接CDQ分治就好了 示例程序: #include<cstdio> #include<algorithm> using

原创 再見,CSDN

CSDN的體驗越來越糟糕了 博客遷移至Github 以後可能偶爾會來這裏更新吧…… ============Update============= 已將博客遷至oi.linkfqy.top

原创 【二分+線段樹】BZOJ4552 [Tjoi2016&Heoi2016]排序

題面在這裏 首先想到二分 然後就可以把整個序列轉化成01序列(0比mid小,1比mid大) 這樣排序的操作就可以用線段樹區間覆蓋來實現 最後判斷K 這個位置是0還是1,就完成了二分的驗證 竟然1A了,好高興 示例程序: #include<