D - Xor Sum 2(尺取法)

D - Xor Sum 2(尺取法)

传送门

思路:利用尺取法,枚举每个左端点的贡献,因为区间具有单调性,所以区间右端点不断右移动即可。

时间复杂度: O ( 2 n ) O(2n)

AC代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
typedef long long ll;
const int N=2e5+5;
#define mst(a) memset(a,0,sizeof a)
int a[N],n;
ll ans; 
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int l=1,r=1,sum=0;l<=n;){
		while(r<=n&&(sum^a[r])==sum+a[r]) sum^=a[r++];
		ans+=r-l,sum^=a[l++];
	}
	printf("%lld\n",ans);
	return 0;
} 
原创文章 201 获赞 165 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/106128930