正题

题目链接:https://www.luogu.com.cn/problem/CF1322B


题目大意

给出\(n\)个数字\(a_i\)求

\[\bigoplus _{i=1}^n\bigoplus _{j=i+1}^n(a_i+a_j)
\]

\(1\leq n\leq 4\times 10^5,1\leq a_i\leq 10^7\)


解题思路

分位考虑的话,先把每个位置更高位的给去掉,此时两个数字和这位为\(1\)的情况当且仅当他们的和在\([2^k,2^{k+1})\)或者\([2^{k+1}+2^k,2^{k+2})\)这两个区间。

双指针扫两次就好了。

时间复杂度\(O(n\log a_i)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=4e5+10;
ll n,a[N],b[N],sum;
signed main()
{
scanf("%lld",&n);
for(ll i=1;i<=n;i++)
scanf("%lld",&b[i]);
for(ll k=0;k<25;k++){
ll l=1,r=0,ans=0;
for(ll i=1;i<=n;i++)
a[i]=b[i]&((1ll<<k+1)-1);
sort(a+1,a+1+n);
for(ll i=n;i>=1;i--){
ll L=(1ll<<k)-a[i],R=(1ll<<k+1)-a[i];
while(r<n&&a[r+1]<R)r++;
while(l<=n&&a[l]<L)l++;
if(l>=i)break;
ans+=min(r,i-1)-l+1;
}
l=1,r=0;
for(ll i=n;i>=1;i--){
ll L=(1ll<<k+1)+(1ll<<k)-a[i],R=(1ll<<k+2)-a[i];
while(r<n&&a[r+1]<R)r++;
while(l<=n&&a[l]<L)l++;
if(l>=i)break;
ans+=min(r,i-1)-l+1;
}
sum+=(ans&1)*(1ll<<k);
}
printf("%lld\n",sum);
return 0;
}

CF1322B-Present【双指针】的更多相关文章

  1. X000100

    P3172 [CQOI2015]选数 gcd 为 \(K\) 不太好办,所以我们先把它转化成 gcd 为 1 的问题: scanf("%d%d%d%d",&n,&k ...

  2. Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) D. Jury Meeting(双指针模拟)

    D. Jury Meeting time limit per test 1 second memory limit per test 512 megabytes input standard inpu ...

  3. 跳转时候提示Attempt to present on while a presentation is in progress

    出现这种情况,例如:我在获取相册图片后,直接present到另一个页面,但是上一个页面可能还未dismiss,所以,要在获取相册图片的dismiss方法的complete的block里面写获取图片及跳 ...

  4. find your present (感叹一下位运算的神奇)

    find your present (2) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  5. HTTP Status 400 - Required String parameter 'userName' is not present 错误

    HTTP Status 400 - Required String parameter 'userName' is not present 错误 先mark  有时间详细写 参考链接: https:/ ...

  6. Linux 克隆虚拟机引起的“Device eth0 does not seem to be present, delaying initialization”

    虚拟机Vmware上克隆了一个Red Hat Enterprise Linx启动时发现找不到网卡,如下所示,如果你在命令窗口启动网络服务就会遇到"Device eth0 does not s ...

  7. required string parameter XXX is not present

    @RequestParam jQuery调用方式: deleteFile: function(filePath) { return ajax({ method: 'POST', url: '/cm/s ...

  8. 启动网卡报:Device eth0 does not seem to be present”解决办法

    Device eth0 does not seem to be present”解决办法 : 用ifconfig查看发现缺少eth0,只有lo:用ifconfig -a查看发现多出了eth1的信息. ...

  9. jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque

    问题: XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present ...

随机推荐

  1. Socket入门Demo

    一.简单介绍下Socket编程    申明:.net网络编程 1)什么是Socket编程? Socket编程就是常说的网络通讯编程,套接字编程.一般应用于软件聊天通讯,以及软件与硬件之间的通讯. 通熟 ...

  2. Math.round() 函数返回一个数字四舍五入后最接近的整数。

    语法: Math.round(x); 参数:x 返回值:给定数字的值四舍五入到最接近的整数 描述: 如果参数的小数部分大于 0.5,则舍入到相邻的绝对值更大的整数. 如果参数的小数部分小于 0.5,则 ...

  3. 【C语言】

    第3章 最简单的C程序设计 顺序程序设计 数据的表现形式及其运算 常量.变量.常变量.标识符 数据类型 整型.浮点型 整型数据的分类 最基本的整型类型 基本整型(int型):占2个或4个字节 短整型( ...

  4. 并发编程之:ThreadLocal

    大家好,我是小黑,一个在互联网苟且偷生的农民工. 从前上一期[并发编程之:synchronized] 我们学到要保证在并发情况下对于共享资源的安全访问,就需要用到锁. 但是,加锁通常情况下会让运行效率 ...

  5. Data Augmentation

    常见操作: 水平翻转-Horizontal Flip Scale-亮度变化 透视变换-perspective,旋转-rotation,错切-Shear,仿射-affine等 尺寸变幻-Resize,可 ...

  6. tcmalloc jemalloc glibc内存分配管理模块性能测试对比

    tcmalloc是谷歌提供的内存分配管理模块 jemalloc是FreeBSD提供的内存分配管理模块 glibc是Linux提供的内存分配管理模块 并发16个线程,分配压测3次,每次压15分钟,可以看 ...

  7. Kotlin之内联回调函数

    let 定义: let扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择:let函数另一个作用就是可以避免写一些判断null的操作. 翻译: ...

  8. 解决->maven下载失败bug

    一.前言: 经过一个下午的奋斗(谷歌,视频...重装)后终,于暂时解决了上一篇文章中的bug 传送门:https://blog.csdn.net/weixin_44092288/article/det ...

  9. vue 根据身份证计算出出生日期和判断性别

    //获取生日和性别     getBirth(idCard) {              var birthday = "";       if(idCard != null & ...

  10. HCNP Routing&Switching之OSPF LSA更新规则和路由汇总

    前文我们了解了OSPF外部路由类型以及forwarding address字段的作用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15225673.html: ...