BZOJ 4300 絕世好題

2021-07-15 09:01:08 字數 1042 閱讀 5381

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

的最長長度。sa

mple

inpu

t 3

12

3 sa

mple

outp

ut

2 hi

nt 對於

100%

的資料,1≤

n≤100000

,ai≤

109。sou

rce

by

oxer

soluti

on

不知道這叫dp

還是叫什麼亂七八糟的大暴搜了……

最長子序列的一般思路就是建立乙個可以快速找到乙個元素。

這個元素滿足以該元素結尾的子串行是最長的可以讓當前元素接在後面的子串行。

聽著有些繞口……

舉個例子吧……就像最長上公升子串行要記錄每個可能更新下乙個點的高度與其最長鏈長。

最長上公升子串行的能否鏈結的關鍵就是高度。這道題也就是找到數與數之間能否鏈結的關鍵:二進位制下在同一位的1

因為數字的二進位制位只有

32位,所以我們可以按位做,直接記錄每個二進位制位上有

1 的數結尾的最長子序列長度。最後統計每一位的最大長度並輸出。

#include

int a[31],ans,n,k;

int main()

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

bzoj4300 絕世好題

給定乙個長度為n的數列ai,求ai的子串行bi的最長長度,滿足bi bi 1 0 2 i len 輸入檔案共2行。第一行包括乙個整數n。第二行包括n個整數,第i個整數表示ai。輸出檔案共一行。包括乙個整數,表示子串行bi的最長長度。3 1 2 3 n 100000,ai 2 10 9 by oxer...