原创 ZOJ 2112 Dynamic Rankings (動態區間第K大) (線段樹套SBT+二分)

題目:支持修改數組元素的區間第k大。 看題解這道題是可以用樹狀數組套主席樹做的,但是樹狀數組套主席樹不優化空間的話,要140MB左右,這題只給了32MB。 沒看懂怎麼優化,只能用線段樹套平衡樹了,我寫的是線段樹套SBT,線段樹的每個節點

原创 CodeForces 547B. Mike and Feet 線段樹

題意: 給定一個長度爲n的數組a a中一個連續區間的strength是區間內的最小值,對x=1,2,...,n分別求長度爲x的連續區間中,strength的最大值是多少 思路: 對於每個a[i]找出在a[i]左邊,離a[i]最近且比a

原创 樹狀數組實現矩陣中矩形區域的修改以及求和

樹狀數組實現矩形區域的修改以及求和                  By 巖之痕 講講樹狀數組如何實現對一個矩陣的矩形區域的加法和求和。 以下,(x1,y1)爲矩形的左下角座標,(x2,y2)爲矩形的右上角座標(x1<=x2 , y1

原创 CodeForces 542D. Superhero's Job 暴力數論

看出這一點,接下來只需要對A進行上述分解,有多少種分解,就有多少個答案。 由於每個p都是不一樣的,所以找出的因子一定沒有相等的,於是每種分解都可以按照從小到大排列。 於是每找出一個因子,都記下這個因子,並在接下來的尋找中, 忽略這個

原创 HDU 3642 Get The Treasury (線段樹掃描線進階--求長方體重疊3次或以上的體積)

題意:給定一堆長方體(< =1000),求重疊了大於等於3次的體積。 思路:線段樹掃描線,或者說,掃描面。 這題 |X|,|Y|<=10^6  ,   |Z|<=500 由於Z相對較小,所以,以垂直Z軸的面來掃描整個圖形。 每一個面再用線

原创 HDU 1255 覆蓋的面積 (線段樹掃描線)

題目:給定平面上若干矩形,求出被這些矩形覆蓋過至少兩次的區域的面積. 思路:線段樹掃描線。 之前寫過求矩形並的面積,求至少覆蓋兩次的面積只需要對線段樹進行小小的修改。 線段樹節點定義如下:<span style="font-size:14

原创 CodeForces 520E. Pluses everywhere 字符串,組合數學

題意:給定長度爲n的數字串,在空隙添上k個+號,可以得到一個式子,求出插入k個+號可以得到的所有式子的計算結果之和 公式題: 代碼中a[i]與上面公式中是反的,代碼中a[i]是從左往右的。 在對M=10^9 +7 取模的情況下,計算

原创 URAL 1183.Brackets Sequence ( DP+記錄路徑)

題意:加入最少數量的括號使得這個括號序列合法。 思路:DP dp[ i ][ j ]表示 區間[ i , j ] 變成合法需要加的最少括號數。 而,要求dp[ i ][ j ]有三種情況 (1) i==j : dp[ i ][ j ]=

原创 Codeforces 542A. Place Your Ad Here (掃描線進階 帶權值的線段交求最大值) (線段樹)

題目: 給n個線段:[ L , R]      給m個線段:[ A , B ] 權值爲C (1<= n , m <= 200000)   (0<=L<=R<=10^9)  (0<=A<=B<=10^9)  (1<=C<=10^9) 要求:

原创 Codeforces 558E. A Simple Task (線段樹+計數排序)

題意: 給定一個長度不超過10^5的字符串(小寫英文字母),和不超過5000個操作。 每個操作 L R K 表示給區間[L,R]的字符串排序,K=1爲升序,K=0爲降序。 最後輸出最終的字符串。 首先,發現每個元素的值只有26種,很自然的

原创 HDU 2665 Kth number(區間第K大) (離散化+主席樹)

題意就是給定一個無序數列,然後給定一堆詢問,求區間[ s , t ]內的第k大的數。 查了很多資料,方法很多,看了半天只看懂了主席樹怎麼做,其餘的做法以後補充。 主席樹(函數式線段樹): 首先是離散化,將所有數按升序映射到正整數。 用線

原创 HDU 4407 Sum (莫比烏斯反演)

題目: 操作次數很少(<=1000),所以可以先求出[1,n]中與p互質的數之和爲多少,然後根據所有的修改來調整答案 求出[1,n]中與p互質的數之和,可以用莫比烏斯反演,複雜度O(2^t) 其中t 爲p的不同的質因數個數。 然後調整答

原创 CodeForces 547C. Mike and Foam 莫比烏斯反演

題意:給定一個長度爲n的數列a,和q個操作(1<= n,q <= 2*10^5, 1 <= a[i] <= 5*10^5 ) 需要維護一個多重集合Q. 每個操作給出一個下標i,如果a[i]屬於Q那麼把a[i]從Q中拿走,如果a[i]不屬

原创 Codeforces 551 E. GukiZ and GukiZiana (分塊搜索)

題目: 給定n個數,q個操作(n<=500000 q<=50000)。 操作有: 1 L R x :將[L,R]的數都加上x 2 y   詢問第一個y和最後一個y的橫座標差,若不存在y則返回-1 這題想了很久。可以實現區間修改的結構都沒

原创 POJ 1177 Picture (線段樹掃描線)

題意: 給定n個矩形(0 <= n < 5000)的左下角座標(x1,y1)和右上角座標(x2,y2)   (-10000 <= x1,x2,y1,y2 <= 10000) 求所有矩形重合後的圖形的周長,如下圖(圖片來自POJ 1177)