Newcoder 84 E 求值(位運算)

2021-08-29 07:58:24 字數 1605 閱讀 5730

description

給定nn

n個數字a1,

a2,.

..,a

na_1, a_2, ..., a_n

a1​,a2

​,..

.,an

​。定義f (l

,r)=

al∣a

l+1∣

...∣

ar

f(l, r) = a_l | a_| ... | a_r

f(l,r)

=al​

∣al+

1​∣.

..∣a

r​。現在列舉(1≤

l≤r≤

n)

(1 \le l \le r \le n)

(1≤l≤r

≤n),問不同的f

ff值一共有多少個。

input

第一行乙個整數n

nn表示陣列大小

第二行n

nn個整數a

ia_i

ai​(1≤

n≤10

5,1≤

ai≤1

06

)(1\le n\le 10^5,1\le a_i\le 10^6)

(1≤n≤1

05,1

≤ai​

≤106

) output

輸出乙個整數表示不同的f

ff值一共有多少個。

sample input3

1 2 0

sample output

solutiona

ia_i

ai​二進位制表示至多20

2020

位,以i

ii為左端點產生的f

ff值不超過20

2020

種(每次至少有一位之前為0

00現在為1

11才會改變f

ff值),故對每一位可以維護該位為1

11的位置序列,每次找到i

ii後面(包括i

ii)的這20

2020

位出現的最早位置,根據出現位置從小到大依次加入新的位即得到不同的f

ff值,開乙個標記陣列記錄出現的值即可,時間複雜度o(20

n)

o(20n)

o(20n)

code

#include#include#includeusing namespace std;

typedef pairp;

const int maxn=1<<20;

int n,f[maxn],p[20];

p a[20];

vectorv[20];

void solve()

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

int ans=0;

for(int i=0;iprintf("%d\n",ans);

return 0;

}

替換空格 newcoder

題目描述 newcoder 題目鏈結 以下為 2019.6.5 更新 class solution int blankcount 0 int oldstrlen strlen str for int i 0 i oldstrlen i 我們統計到了原字串中所有的空格,那麼替換之後字串的長度應該為 我...

newcoder猴子吃香蕉

有n只猴子,第i只猴子每過xi小時會連續吃香蕉yi小時。猴子從第二次開始每次休息結束後這只猴子連續吃香蕉的時間會增加zi小時。給定 n只猴子,每乙隻的 xi,yi,zi,以及時間 t,求在前 t小時中,所有猴子共吃了多少小時。對於乙隻猴子來說是這樣的 從第1小時開始 休息xi小時 1 x i 吃yi...

newcoder前端開發規範

前端開發規範 1 變數命名規範 1.1變數命名使用駝峰規則,首字母為變數的型別。s 字串 string 變數,比如shtml o 物件 object 比如obody a 陣列 array 變數。比如 apart n 數字 number 變數 包括所有整數 浮點數 nage 14 npi 3.14 f...