題目描述
位運算是乙個非常重要的東西。而小a最近在學習位運算,小a看到了一道很簡單的例題,是說從n個數裡面選出n-1個數要讓它們或起來的值最大,小a想知道這個答案是多少。你可以幫幫他嗎?輸入描述:
第一行乙個整數n表示有n個數接下來一行n個數表示a1,a2…an輸出描述:
一行輸出個結果代表最大值輸入
5輸出 說明1 2 4 8 16
選擇2,4,8,16或的和是最大的,沒有比這個更大的方案。備註: 1 ≤ n ≤ 5e6,1 ≤ a[i] ≤ longlong
雖說是位運算,但是這題和二進位制沒啥關係…
要去除n個數中的乙個,使剩下的n-1個數最大,或運算的話要除去的數並沒有什麼特徵,於是要列舉被除去的數。
o(n2)的列舉肯定是不行的,這裡就要用到技巧了,先預處理前 i 個數的或和,後 i 個數的或和,分別放入l[i]和r[i]中,然後列舉被除去的數,則有
除 去i
後的或和
=l[i
−1]∣
r[i+
1]
除去 i 後的或和 = l[i-1] | r[i+1]
除去i後的或
和=l[
i−1]
∣r[i
+1]該方法可適用於定義一種運算,然後求去除其中乙個數然後運算後的最大/最小值。
#include
#define ll long long
using
namespace std;
const
int inf=
0x3f3f3f3f
;const
int maxn=
5e6+10;
ll a[maxn]
,l[maxn]
,r[maxn]
;//外部定義,陣列全部置零
intmain()
牛客競賽(字串 思維)
題目描述 給出乙個僅包含小寫字母的字串s,你最多可以操作k次,使得任意乙個小寫字母變為與其相鄰的小寫字母 ascii碼差值的絕對值為1 請你求出可能的最長相等子串行 即求這個字串修改至多k次後的的乙個最長子序列,且需要保證這個子串行中每個字母相等 子串行 從原字串中取任意多個字母按照先後順序構成的新...
牛客小白月賽13 D 小A的位運算
題目描述 位運算是乙個非常重要的東西。而小a最近在學習位運算,小a看到了一道很簡單的例題,是說從n個數裡面選出n 1個數要讓它們或起來的值最大,小a想知道這個答案是多少。你可以幫幫他嗎?輸入描述 第一行乙個整數n表示有n個數接下來一行n個數表示a1,a2 an 輸出描述 一行輸出個結果代表最大值 示...
奇怪的排序問題(牛客競賽)
時間限制 c c 5秒,其他語言10秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 操場上有n個人排成一隊,這n個人身高互不相同,可將他們的身高視為乙個1到n的排列。這時需要把隊伍變成公升序,也就是從矮到高排序。每次可以選擇乙個人,讓這...