BZOJ4300 絕世好題

2021-08-01 08:52:57 字數 635 閱讀 4814

傳送門

題目大意,給定n,,求a的乙個最大子串行bn,使得bi&b(i-1)!=0.求最大的|b|

題解:顯然是dp,狀態轉移方程顯然是dp[n]=max,a[n]&a[k]!=0

考慮優化,發現和lis有點類似。

lis有個線段樹優化就是暴力的記錄最後的數字(顯然是最大的)對應的最長的序列是多長,這樣離散化一下每次詢問字首最大值。

這個題的優化類似,發現a&b!=0意味著至少有一位都是1.

所以用f[i]表示第i為為1,最長為多長,這樣每次讀進來乙個數x(假設x是第i個數),看x的二進位制哪一位=1,設是第p位,

那麼dp[i]=max(f[p])+1,x&(1《然後計算出dpi用來更新fi即可。

最後max(dp[i])就是答案。

//bzoj 4300

#include#include#include#define maxl 32

using namespace std;

int f[maxl],n,ans;

int main()

{ scanf("%d",&n);

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

{ int x,ansx=1;scanf("%d",&x);

for(int j=0;j

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 ...