原创 codeforces 893F 主席樹||線段樹合併

題意:有一顆樹,樹上每個點有給定點權,有m次詢問,每次詢問點x的所有子樹中,與x的距離小於等於k的所有點的點權最小值是多少。題目要求強制在線。 思路: 主席樹解法:按照dfs序在樹上建立主席樹,詢問是查詢x節點的管轄的那段區間,屬於經典操

原创 不太強的線段樹區間更新模板

由於每次比賽線段樹都是手寫的,風險較大易背鍋,爲了保證線段樹不再翻車,這一次認認真真的寫了一個線段樹模板。 #include<cstdio> #include<cstring> #include<iostream> #include<a

原创 牛客寒假算法訓練營2 處女座與寶藏(2-sat)

爲了補這道題專門花了一下午學了2-sat 理論倒是好懂,就是建模方法想了很久,發現一篇很好的博文,直接貼過來好了。 -----------------------------------------------------------

原创 HDU6625 01字典樹亂搞

題意:給你兩個數組a和b,讓你安排a和b的順序使得a數組與b數組一一對應得到的異或數組c字典序最小 思路:建01字典樹暴力跑最優匹配即可,借鑑標程思想寫了一份AC代碼,將兩個數組建到一顆字典樹上,用num數組維護當前節點是否可用,這樣便使

原创 HDU1814 求2-sat字典序最小的解

題意:有n對人,編號從1-2*n,有m對人互相不喜歡,每對人中必需選1個人加入和平委員會,求字典序最小的解 解析:直接2-sat建圖然後用染色法跑dfs即可。 #include<bits/stdc++.h> using namespac

原创 POJ3648 2-sat強連通縮點法

題意:有一對新人結婚,邀請n對夫婦去參加婚禮。有一張很長的桌子,人只能坐在桌子的兩邊,還要滿足下面的要求:1.每對夫婦不能坐在同一側 2.n對夫婦之中可能有通姦關係(包括男男,男女,女女),有通姦關係的不能同時坐在新娘的對面,可以分開坐,

原创 拓展歐幾里得經典題(+盧卡斯定理)

題意:現在你在1層樓,每次移動能向上移動a層或者向下移動b層,問最少移動多少次能到達第m層,設樓層有足夠高並且地下層數也足夠多,因此不必考慮到達樓層上限或下限。數據範圍:1<=m,a,b<=1e9,答案對p取模,1<=p<=1e6。 題解

原创 第十五屆華中科技大學程序設計邀請賽現場賽 H題 反向建圖+排序+搜索

題意:給出一個由若干單詞組成的文章,給出一些單詞間的轉換規則,修改文章使得1.字母aeiou出現的次數儘量小 2. 在1的基礎上文章長度儘量短。 求出現次數和文章長度。解析:按單詞轉換規則反向建圖,將單詞按照元音字母出現次數第一關鍵字,長

原创 十五屆華中科技大學程序設計邀請賽現場賽 I題 單調隊列

題意:給你一個n*m的矩陣,讓你找到一個最大的L值,滿足邊長爲L的正方形子矩陣中最大最小值差值小於等於G 解析:一個顯然的做法是使用二維數據結構,然而二維線段樹和二維樹狀數組容易寫炸,二維RMQ被卡了空間,於是只能選擇滾動數組dp或者單調

原创 第十五屆華中科技大學程序設計邀請賽現場賽 C題 巧用樹狀數組

題意:求區間長度在[L,R]內,區間和大於等於s的區間個數。 解析:先將所有的前綴和離散化,然後將長度爲L到R的前綴逐一插入樹狀數組,再枚舉區間左端點,掃一遍離散化後的前綴和數組,掃的過程中先更新答案,再更新樹狀數組。 代碼如下: #i

原创 主席樹經典區間第k大模板(不帶修改&&帶修改)

此模板作用爲經典的查詢區間第k大 不帶修改:複雜度O(nlogn) 帶修改:複雜度O(n∗(logn)^2) 不帶修改的主席樹就是在前一棵樹的基礎上重建其中一條鏈,其餘的鏈都和原來的公用,相當於logn的複雜度新建一顆線段樹 代碼如下:

原创 二維樹狀數組總結及模板

由於最近經常被二維問題卡住,而且二維線段樹日常寫炸,於是來學習總結一下二維樹狀數組來緩解一下一遇到二維問題就拉閘的情況。 首先是最基本的單點修改+區間查詢 這個好說,就是普通一維的一個小拓展,就直接上代碼了: int lowbit(in

原创 HDU2825 AC自動機+狀壓DP

題意:給你m個字符串,求長度爲n的包含至少k個給定串的字符串個數,答案對20090717取模 思路:因爲m的值很小,所以可以進行狀壓DP dp[i][j][k]   i爲字符串當前長度,j爲當前走到的自動機的節點編號,k爲狀壓後的當前狀態

原创 從poj2778到hdu2243 AC自動機+矩陣快速冪+等比矩陣求和

poj2778:給你m個病毒串,問不包含病毒串的長度n的DNA片段有幾個。 顯然是一道AC自動機的題目,但難點在於如何求出答案。 從根出發,在AC自動機上跑,經過k次轉移到達某個結點,這個結點所代表的病毒串可以看作長度爲k的字符串的後綴,

原创 POJ1389 掃描線+線段樹

一道經典的掃描線+線段樹求矩形面積並的題目 用線段樹維護y,記錄所有線段被覆蓋的次數和長度,掃描線維護x,把一個長方形拆成兩個事件,左邊界作爲+1,右邊界作爲-1,即可利用線段樹進行維護。   非離散化版本: #include<iost