bzoj4300 絕世好題

2021-07-31 16:33:42 字數 730 閱讀 3537

我好像繞了乙個大彎然後才繞到正解上。 o(

n2) 的做法是顯然的,考慮cd

q 分治,每次處理左邊對右邊的影響,考慮怎樣就能轉移?

題目要求是bi

tand

結果不為

0 ,也就是有公共的某一位等於

1,因為現在我們不考慮順序,於是想到這樣一種方法:列舉當前數字的每乙個等於

1 的位,看看前面哪個數這位上也是

1,然後轉移;發現這個過程可以用桶優化,就是開個有

30 個元素的桶,w[

i]表示第

i 位等於

1的數的dp

最大值,掃瞄一遍前半區間,更新下這個桶就好。對於後面每個數,可以用桶來轉移。

這樣是o(n

log2

n)的,再仔細一想,其實不用cd

q 分治也能做,直接把這個序列掃一遍,做同樣的事情不就好了

//dp

#include

#include

#define maxn 100010

using

namespace

std;

int w[40], ans, n;

int main()

for(i=0;i<=30;i++)ans=max(ans,w[i]);

printf("%d",ans);

return

0;}

BZOJ4300 絕世好題

description 給定乙個長度為n的數列ai,求ai的子串行bi的最長長度,滿足bi bi 1 0 2 i len input 輸入檔案共2行。第一行包括乙個整數n。第二行包括n個整數,第i個整數表示ai。output 輸出檔案共一行。包括乙個整數,表示子串行bi的最長長度。sample in...

bzoj4300 絕世好題

絕世傻題 既然要求bi andb i 1 0,那麼就讓他一定成立咯。從1到n列舉,當前數為x,前面的數都操作完了,那麼 fx max 1,然後再更新一下gi 沒了 淦。一開始寫了發trie。寫完才發現根本不對啊tat 好虛啊老是犯這種錯 include define rep i,a,b for in...

BZOJ 4300 絕世好題

de scri ptio n 給定乙個長度為 n 的數列ai 求ai 的子串行bi 的最長長度,滿足bi bi 1 0 2 i len in put 輸入檔案共 2 行。第一行包括乙個整數n。第二行包括 n 個整數,第 i個整數表示ai out put 輸出檔案共一行。包括乙個整數,表示子串行bi ...