問題 A 異或序列

2021-08-22 11:51:08 字數 1172 閱讀 8559

時間限制: 1 sec  記憶體限制: 128 mb

提交: 188  解決: 86

[提交] [狀態] [討論版] [命題人:admin]

題目描述

已知乙個長度為n的整數數列a1,a2,…,an,給定查詢引數l、r,問在al,al+1,…,ar區間內,有多少子串行滿足異或和等於k。也就是說,對於所有的x,y(l≤x≤y≤r),滿足ax⊕ax+1⊕⋯⊕ay=k的x,y有多少組。

輸入輸入第一行為3個整數n,m,k。第二行為空格分開的n個整數,即a1,a2,…,an。接下來m行,每行兩個整數lj,rj,代表一次查詢。

輸出輸出共m行,對應每個查詢的計算結果。

樣例輸入

4 5 1

1 2 3 1

1 41 3

2 32 4

4 4

樣例輸出

421

21

提示

對於30%的資料,1≤n,m≤1000。

對於100%的資料,1≤n,m≤105,0≤k,ai≤105,1≤lj≤rj≤n。

莫隊板子題,只要維護下字首和就行,順便學了一波簡單莫隊

#include typedef long long ll;

using namespace std;

int a[100005],ans[100005];

int tmp[100005];

int l,r,cnt,tmpp;

struct fun

z[100005];

bool cmp (fun a, fun b)

bool cmp1(fun a, fun b)

int main()

tmp[ a[0] ]++;

sort(z, z + m, cmp);

for (int i = 0; i < m; i++)

while (l > z[i].l)

while (r < z[i].r)

while (r > z[i].r)

ans[ z[i].i ] = cnt;

}sort(z, z + n, cmp1);

for (int i = 0; i < m; i++)

printf("%d\n", ans[i]);

return 0;

}

異或和之和 異或問題

題目 有n個數,任選3個進行異或,求出所有三元組的異或和的和 普通計算是 o n 3 但是發現,對於異或的運算,就轉換為二進位制的運算,把每乙個陣列轉換為二進位制,再拆分,當且僅當 1 1 1 和 1 0 0 時,答案才為1,否則都是0,也就是說,只有這兩個情況是由貢獻的 把每個數位化為二進位制,然...

6759A異或序列

題目描述 已知乙個長度為n的整數數列a1,a2,an,給定查詢引數l r,問在al,al 1,ar區間內,有多少子串行滿足異或和等於k。也就是說,對於所有的x,y l x y r 滿足ax ax 1 ay k的x,y有多少組。輸入輸入第一行為3個整數n,m,k。第二行為空格分開的n個整數,即a1,a...

異或 異或相關

感謝 morning glory 贊助 異或異 或 de scri ptio ndes crip tion 給定 l,r l,r,求 i lr j lr i ji l r j l r i jl,r 1 09l,r 1 09 s olut ions olut ion 假設l 1,r 4l 1,r 4,...