bzoj5301: [cqoi2018]異或序列
已知乙個長度為 n 的整數數列 a[1],a[2],…,a[n] ,給定查詢引數 l、r ,問在 [l,r] 區間內,有多少連續子串行滿足異或和等於 k 。
也就是說,對於所有的 x,y (l≤x≤y≤r),能夠滿足a[x]^a[x+1]^…^a[y]=k的x,y有多少組。
輸入檔案第一行,為3個整數n,m,k。
第二行為空格分開的n個整數,即ai,a2,….an。
接下來m行,每行兩個整數lj,rj,表示一次查詢。
1≤n,m≤105,o≤k,ai≤105,1≤lj≤rj≤n
輸出檔案共m行,對應每個查詢的計算結果。
4 5 1
1 2 3 1
1 41 3
2 32 4
4 4421
21題解here!
去吧莫隊!
預處理異或字首和,每次莫隊暴力轉移就好。
但是這道題需要注意一下左端點的轉移。
如果原陣列是$val[l]$,字首和陣列是$sum[l]$的話。
因為$val[l]=sum[l]\ xor\ sum[l-1]$,所以我們刪除l的時候,實際上需要刪除的是$l-1$。
剩下的就是莫隊板子了。
據說是$cf$原題?反正我從來不做$cf$題。。。
附**:
#include#include#include#include#define maxn 100010using namespace std;
int n,m,k,block,s=0;
int val[maxn],sum[maxn],num[maxn],ans[maxn];
struct questionque[maxn];
inline int read()
while(c>='0'&&c<='9')
return date*w;
}inline bool cmp(const question &p,const question &q)
while(que[i].rright)change_add(sum[++right]);
ans[que[i].id]=s;
}for(int i=1;i<=m;i++)printf("%d\n",ans[i]);
}void init()
block=sqrt(n);
for(int i=1;i<=m;i++)
sort(que+1,que+m+1,cmp);
}int main()
bzo5301 Cqoi2018 異或序列 莫隊
已知乙個長度為 n 的整數數列 a 1 a 2 a n 給定查詢引數 l r 問在 l,r 區間內,有多少連續子 序列滿足異或和等於 k 也就是說,對於所有的 x,y l x y r 能夠滿足a x a x 1 a y k的x,y有多少組。1 n,m 105,o k,ai 105,1 lj rj n...
bzoj5301 異或序列(莫隊演算法)
題目鏈結 description 已知乙個長度為 n 的整數數列 a 1 a 2 a n 給定查詢引數 l r 問在 l,r 區間內,有多少連續子段滿足異或和等於 k 也就是說,對於所有的 x,y l x y r 能夠滿足a x a x 1 a y k的x,y有多少組。input 輸入第一行,為3個...
bzoj1257 CQOI 餘數之和
題目 time limit 5 sec memory limit 162 mb submit 2383 solved 1105 submit status discuss 給出正整數n和k,計算j n,k k mod 1 k mod 2 k mod 3 k mod n的值,其中k mod i表示k除...