简要题意

给定一个区间 \([l,r]\),从中选出若干整数按位或,求可能出现的数的方案数。

数据范围:\(1\le l\le r\le2^{60}\)。

思路

首先对于 \([l,r]\) 里的数全都满足条件,然后因为是按位或,所以 \(l,r\) 二进制下的一段前缀就与答案无关可以先去掉。

现在我们只需要考虑比 \(r\) 还要大的数。去掉一段前缀后 \(r\) 二进制的最高位一定是 \(1\),设 \(x=highbit(r)\),我们可以根据 \(x\) 将这个区间划分成两部分 \([l,x)\) 和 \([x,r]\)。对于第一个区间里,任何数按位或答案都在第一个区间内,所以不用考虑,我们只用考虑只在第二个区间选数或者两个区间都选数。你会发现在第一个区间选多少数都可以等价为选一个数,所以其实只用考虑选两个数的情况。

  1. 如果只在第二个区间选数,我们可以不看最高位的一,因为他是公共部分。假设剩下的部分为 \(y\),那么在第二个区间选数就等价于在 \([0,y]\) 内选数,设 \(z=highbit(y)\),实际上选出来的就是 \([x,x+2z)\) 的所有数,去掉小于等于 \(r\) 的答案区间就为 \((r,x+2z)\);
  2. 如果在两个区间中各选一个数,我们可以发现对于第一个区间我们可以选 \([l,x)\),当第二个区间选 \(x\) 的时候就可以凑出 \([x+l,2x)\) 中的所有数,答案区间就为 \([\max(x+l,r+1),2x)\)。

最后只需要判断一下后两种情况是否有交集,如果有交集那么最后答案就直接为 \([l,2x)\),否则就把答案区间累加即可。时间复杂度只有 \(O(\log r)\),非常优秀!

代码

signed main(){
// fileio(fil);
l = rd(), r = rd();
if(l == r)return puts("1"), 0;
for(int i = 60; ~ i; --i){
x |= r >> i << i;
if((l >> i) ^ (r >> i))break;
}
y = x & - x; r += y - x;
l += y - x; ans = r - l + 1;
for(x = 1; x + y <= r; x <<= 1); x += y - 1;
if((y | l) <= x)return printf("%lld", (y << 1) - l), 0;
ans += (y << 1) - (y | l) + x - r;
printf("%lld", ans);
return 0;
}

AGC015D题解的更多相关文章

  1. AtCoder随做

    突然发现只有我没写过 AT. 没写题解不意味着没做,有的忘了写或者太草率了就算了. 部分前言删了. 目录 ABC020D ABC241G ABC268 AGC003D AGC004D AGC004E ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  10. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. 深入聊聊async&Promise

    正文 最近在学习JavaScript里的async.await异步,对于其中的Promise状态以及背后的Js引擎实际运行状态不大理解且很感兴趣,因此花了一点时间仔细研究了一下. 从Example说起 ...

  2. vue 相同路由不同参数跳转时,不刷新

    在公共的router-view上加 :key="$route.fullPath  控制key属性变化

  3. R数据分析:cox模型如何做预测,高分文章复现

    今天要给大家分享的文章是 Cone EB, Marchese M, Paciotti M, Nguyen DD, Nabi J, Cole AP, Molina G, Molina RL, Minam ...

  4. 从底层源码深入分析Bean的实例化

    生命周期的整体流程 Spring 容器可以管理 singleton 作用域 Bean 的生命周期,在此作用域下,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁. ...

  5. GraphQL Part VII: 实现数据变更

    我们已经可以使用各种方式来获取数据了.但是如何修改服务器端的数据呢?包括数据插入,修补,删除或者更新等等.GraphQL 的 mutation 就是负责这部分的. 在我们继续之前,我想对项目做一点调整 ...

  6. zz Spring 是一种反模式

    Java 将会消亡 – Martin Vysny – 第一性原理思考 原文标题"Java 将会消亡", 我并不认可 Java 会消亡一说, 作者还处于 FP 亢奋期,而我已经从 F ...

  7. .NET 9 New features-JSON序列化

    .NET 9已经发布有一段时间了,近期整理一下.NET 9的新特性,今天重点分享.NET 9 JSON序列化方面的改进. 先引用官方的说明: 在 System.Text.Json 中,.NET 9 提 ...

  8. mongo docker compose

    49dSsULIAv6NiP8hdqqbapRTHVx9BRYU4VVakN9A4FJWV0KufqEm/UoTUvn9Z4eg FRP7iHXF6Qiou5MK2Ak76zRBU7MOIVCl0DI ...

  9. maven常见命令之 -pl -am -amd

    昨天maven的deploy任务需要只选择单个模块并且把它依赖的模块一起打包,第一时间便想到了-pl参数,然后就开始处理,但是因为之前只看了一下命令的介绍,竟然花了近半小时才完全跑通,故记录此文. 假 ...

  10. Spring boot 2.0 之优雅停机

    spring boot 框架在生产环境使用的有一段时间了,它"约定大于配置"的特性,体现了优雅流畅的开发过程,它的部署启动方式(java -jar xxx.jar)也很优雅.但是我 ...