給定乙個長度為 n 的序列 a[1..n],定義函式 f(b[1..m]) 的值為在 [0,m-1] 內滿足如下條件的 i 的數目:
b 中前 i 個數異或起來的值小於 b 中前 i +1個數異或起來的值。
對於 a[1..n] 的每個子串行 b[1..m],求f(b[1..m])之和。
顯然只需要對每個位置i求出前面多少子串行異或和比再異或它之後小即可,後面部分乘乙個2的次冪。 假如a
<
b 則我們知道a^b的第乙個1出現在b中。
因此找到a[i]最高位的1,前面的異或和在這一位是0即可。
因此再維護c[j][0/1]兩個值表示前i個里多少子串行第j位是0/1。
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
#define fd(i,a,b) for(i=a;i>=b;i--)
using namespace std;
typedef long long ll;
const int maxn=100000+10,maxd=31,mo=998244353;
int a[maxn],c[maxd+10][2],two[maxn];
int i,j,k,l,t,n,m,ans;
int main()
else}}
printf("%d\n",ans);
}
DP? hihocoder1526 序列的值
給定乙個長度為 n 的序列 a 1.n 定義函式 f b 1.m 的值為在 0,m 1 內滿足如下條件的 i 的數目 b 中前 i 個數異或起來的值小於 b 中前 i 1個數異或起來的值。對於 a 1.n 的每個子串行 b 1.m 求f b 1.m 之和。我們換一種思路 設x為a i 前的某些值的異...
30 序列構造
給定兩個長度為 n 的正整數序列 a a1,a2,an 和 b b1,b2,bn 現在你選擇 k 個數構成序列 p p1,p2,pk 使得 序列 p 中的元素是不重複的1 pi n 其中1 i k2 ap1 a pk 大於序列 a 所有元素的和2 bp1 b pk 大於序列 b 所有元素的和 k 小...
192220序列型別
序列表示索引未非負整數的有序物件集合,包括字串,列表,元祖。說明 舉例 元祖跟裡面的逗號相關 mytuple a b c d type mytuple 列表根中括號相關 mylist a b c d type mylist 字串跟雙引號有關 mystr a,b,c,d type mystr 適用於所...