方伯伯的玉公尺田(樹狀陣列優化)(三維偏序)

2022-05-06 22:51:08 字數 1550 閱讀 9397

zzh學長留的毒瘤題......

首先這題先明白乙個性質:

當我們選擇增區間的高度時,我們應該將所選的增加的左端點到n全增大,因為我們要求

最後成的單調不下降序列長度最大,所以這樣增穩賺不虧。。。。

然後那麼我們發現這題最後的點的最優高度是a[n]+k確定的

設陣列含義f[j][k]表示當前玉公尺高度j,k次操作的最長序列長度

並且我們可以把此題看作三位偏序:

1. 當前玉公尺位置i,由1-i-1轉移

2. 當前玉公尺高度j,由1-j轉移

3.當前玉公尺已操作k,由1-k-1轉移

用樹狀陣列維護j,k,(很顯然了.....)

(為了節省記憶體所以我們第一位迴圈是i,這樣保證我們的i是有序的,就不需要寫在陣列裡,

其實i,j,k,任選兩位都行,只是為了省記憶體嘛.......)

注意點:

1.迴圈k時倒序,(顯然嘛.....當前的k若是正序,他的插入會影響當前位k的列舉)

2.預處理要注意,根據你的列舉來定,當然也可以不

3.ans值不一定選中最後乙個點

1 #include2 #include3 #include4 #include5 #include6 #include7 #include

8 #include9

#define int long long

10using

namespace

std;

11int c[511][5501

];12

int a[11001

];13

intmaxn;

14int lowbit(int x)

15int

n,k;

16void add(int x,int y,int sum)//

x 第幾個操作 y 高度 k第k操作

1724}25

}26int query(int x,int

y)2735}

36return

ans;37}

38int ans=0;39

signed main()

4047

for(int i=1;i<=n;++i)

4856}57

//int ans=query(k+1,a[n]+k);

58 printf("

%lld\n

",ans);

59 }

view code

方伯伯的玉公尺田

例題 方伯伯的玉公尺田 一位大佬的鏈結 有關二維樹狀陣列 關於我做這道題的心路歷程 1.我在某個晚上準備練習dp題,看到方伯伯的玉公尺田這 道題,難度適宜,知識簡單,準備做一做。乙個晚上過去 了,我除了推出了他每一次會抬高最右邊的玉公尺外,還推 出了一大堆錯誤結論,例如一定會從已有的上公升序列中的 ...

方伯伯的玉公尺田 SCOI2014

方伯伯在自己的農田邊散步,他突然發現田裡的一排玉公尺非常的不美。這排玉公尺一共有n株,它們的高度參差不齊。方伯伯認為單調不下降序列很美,所以他決定先把一些玉公尺拔高,再把破壞美感的玉公尺拔除掉,使得剩下的玉公尺的高度構成乙個單調不下降序列。方伯伯可以選擇乙個區間,把這個區間的玉公尺全部拔高1單位高度...

方伯伯的玉公尺田 SCOI2014

方伯伯在自己的農田邊散步,他突然發現田裡的一排玉公尺非常的不美。這排玉公尺一共有 n 株,它們的高度參差不齊。方伯伯認為單調不下降序列很美,所以他決定先把一些玉公尺拔高,再把破壞美感的玉公尺拔除掉,使得剩下的玉公尺的高度構成乙個單調不下降序列。方伯伯可以選擇乙個區間,把這個區間的玉公尺全部拔高 1 ...