【bzoj4017】小Q的无敌异或 树状数组
来源:互联网 发布:编程用mac air还是pro 编辑:程序博客网 时间:2024/04/28 17:27
按位考虑
第一个问题,一堆0和1,求所有区间的异或的和
从前往后枚举,记录当前有多少个0,多少个1,随便一算就可以
第二个问题,一堆0和1,求所有区间的和的异或
所有大于第i位的部分我们都可以省略,于是等价于把每个数%2^(i+1)
第一个问题,一堆0和1,求所有区间的异或的和
从前往后枚举,记录当前有多少个0,多少个1,随便一算就可以
第二个问题,一堆0和1,求所有区间的和的异或
所有大于第i位的部分我们都可以省略,于是等价于把每个数%2^(i+1)
从前往后枚举,如果两个数的差模意义下大于等于2^i,则第i位为1,于是写一个权值线段树或者离散化+树状数组即可,酸爽
虽然看上去挺简单,但还是调了很久。
#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>#include<iostream>#define maxn 100010#define mod 998244353using namespace std;long long sum[maxn],a[maxn],b[maxn],t[maxn];long long ans1,ans2;int c[maxn];int n;int lowbit(int x){return x&(-x);}void add(int i,int x){i++;if (!i) return;for (;i<=n+1;i+=lowbit(i)) c[i]^=x;}int query(int i){int ans=0;i++;for (;i;i-=lowbit(i)) ans^=c[i];return ans;}void calc1(int t){int sum=1,now=0;long long ans=0;for (int i=1;i<=n;i++){int x=((a[i]>>t)&1);now^=x;if (now==1) ans+=sum; else ans+=i-sum,sum++;}ans1=(ans1+ans*(1ll<<t)%mod)%mod;}int Query(long long x){int l=0,r=n,ans=-1;while (l<=r){int mid=(l+r)/2;if (t[mid]<=x) ans=mid,l=mid+1; else r=mid-1;}return ans;}void calc2(long long p){memset(c,0,sizeof(c));t[0]=0;for (int i=1;i<=n;i++) t[i]=(t[i-1]+a[i])%(1ll<<(p+1)),b[i]=t[i];sort(t,t+n+1);int ans=0;for (int i=0;i<=n;i++){add(Query(b[i]),1);ans^=(query(Query(b[i]-(1ll<<p)))^query(Query(b[i]))^query(Query(b[i]+(1ll<<p))));}if (ans) ans2|=(1ll<<p);}int main(){scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%lld",&a[i]);for (int i=0;i<=20;i++) calc1(i);for (int i=0;i<=40;i++) calc2(i);printf("%lld %lld\n",ans1,ans2);return 0;}
0 0
- 【bzoj4017】小Q的无敌异或 树状数组
- bzoj4017 小Q的无敌异或 数学
- BZOJ4017 小Q的无敌异或 好题
- BZOJ 4017 小Q的无敌异或
- bzoj 4017 小Q的无敌异或
- 2017.10.12 小Q的无敌异或 失败总结
- 小Q的无敌异或(第一问)
- xian 区域赛 g bzoj 4017: 小Q的无敌异或
- bzoj 4017 小Q的无敌异或(所有子区间异或的和 与和的异或)
- 树状数组+异或运算
- 2017西安交大ACM小学期数据结构 [又是树状数组、异或]
- 树状数组扩展(异或求和)
- 关于树状数组的一个小问题
- 超无敌搞笑的 Q 版语文 ^_^
- 小 Q 的棋盘
- NOJ——1669xor的难题(树状数组的异或求和)
- [BZOJ4888][洛谷3760]异或和 树状数组
- 小细节!!!!(二维树状数组的相关操作)
- 倒谱cepstrum的名字来源
- C++第六次上机作业
- 命令执行方式
- LeetCode 005: Longest Palindromic Substring
- 毛玻璃效果实现(必须api4.0以上)
- 【bzoj4017】小Q的无敌异或 树状数组
- JS工作随笔 05 JS格式化Thu May 12 2016 08:00:00 GMT+0800 (中国标准时间)
- c++实验
- 动态规划——基础知识
- c/c++ 复习随记(2)----fwqlzz love is for ever
- 如何解决Android出现的异常“java.lang.NoSuchMethodError: android.widget.LinearLayout.setBackground”?
- android 23以上使用httpclient
- 第六次上机实验
- "Windows远程调试Linux上的C++程序:Eclipse+MingW+Samba+GDBserver"-------续文