原创 hdu5358(尺取法)

這題若是按常規的思路肯定會超時,我們需要注意題目中給出的每一個條件,注意有log2這個條件,s(i,j)在[2^(k-1),2^k)之間時 log2(s(i,j))下取整+1的值是k,枚舉k從1到34 ,求出對應的s(i,j)在[2^(k

原创 hdu5316區間最值問題(附帶題目意思詳解) 一次ac

T組數據 N個數字,M次操作 op=0:找出L-R區間內的最大‘值’ op=1:把a位置的數字換成b 對最大‘值’的定義:取區間內的最大子序列,需要保證子序列的下標爲奇偶交替的 用線段樹分別記錄每個區間的 ......

原创 漢諾塔系列專題(逐步理解遞推遞歸)

最裸的漢諾塔: 第一步:把n-1個盤子移到B柱 第二步:把第n個柱子移到C柱 第三步:把n-1個盤子移到C盤 第一步和第三步是一樣的,如果只需要求最少的步數,可以不管中間步驟,用遞推直接寫出即可 核心代碼 a[1]=1; for(int

原创 hdu3397(線段樹區間合併)

是一道坑題。。。大致的思維很好想,只要你知道區間合併,這題的結點維護的變量略多,這題需要用到lazy標記。我用的是一個lazy,寫了200行代碼,好

原创 poj2528(線段樹區間更新)

#include <iostream> #include<stdio.h> #include<cstring> #include<algorithm> #include<math.h> using namespace std; const

原创 hdu5372(樹狀數組)

開始看這題時以爲是線段樹區間更新,誤以爲和poj2528差不多,然後上手打了。。。到末尾時發現有個點不一樣,那就是刪除,還要恢復到之前的狀態,這個不

原创 字典樹模板(hdu1251)

真是不爽。。特麼水的不能再水的題,g++一直超內存,c++a了#include <iostream> #include<stdio.h> #incl

原创 hdu5334

比賽時想了3小時,到4點有了思路,結果當時體力不夠,思維不夠嚴謹,一直wa。網上看大神題解後,發現大神的思維不是我等渣渣能想出來的,故此又重新拾起自己的思維,ac。 遇到這種題目,大家一定要想,這種題目一定是有規律的,大家要善於發現規律。

原创 hdu4417(單純裸劃分樹)

來源:http://acm.hdu.edu.cn/showproblem.php?pid=4417 題意:給一些數,數中有重複的。還有一些詢問,問的是[L,R] 區間內有多少個數小於h,有多次詢問。 一般的方法肯定很容易超時,那

原创 poj3264

題目大意:給一列數,給一些詢問,問[a,b]內最大值-最小值是多少分析:比較簡單的題目。以點建樹,建樹時,遇到葉子節點則讀入,max = min = 讀入值,否則用左右兒子的最大最小值來更新當前節點的最大最小值。查詢就不多說了 很裸的線段

原创 poj2886

此題需要了解反素數的知識,之前不瞭解反素數還想把1e5以內的數的因子個數全部打表。。。。 此題還有一點,就是線段樹的更新操作,刪除某節點,這可能是大家之前沒有接觸到得 #include <iostream> #include<stdio.

原创 poj3268(線段樹)

此題需要求某一區間內的出現最多次數的數的出現次數,此題有個好處就是它是非遞減序列。題目的輸入輸出就讓人想起了線段樹。。。。 每個節點需要保存三個值,一個是區間左邊相同數的次數,一個數是區間右邊相同數的次數,一個是最多出現次數的個數 #in

原创 kmp模板

<pre name="code" class="cpp">/* pku3461(Oulipo), hdu1711(Number Sequence) 這個模板 字符串是從0開始的 Next數組是從1開始的 */ #include <io

原创 ac自動機模板(hdu2222)

#include <iostream> #include<stdio.h> #include<queue> #include<string.h> using namespace std; const int MAX=1e6+20; cha

原创 poj3321

剛見到此題時,我認爲此題和poj2352star可以用類似的模型,然後寫了一個程序,結果wa了,後來又仔細讀了遍題目,發現之前題目理解錯誤。 這題難點在於把樹映射到數組中,然而樹節點的序號並不能達到要求,我們可以求出每個節點管理的左值和右