题目描述

给定一个长度为n的序列$a_1,a_2...a_n$,其中每个数都是正整数。

你需要找出有多少对(i,j),$1 \leq i \leq j \leq n$且$gcd(a_i,a_{i+1}...a_j)~xor~(a_i~or~a_{i+1}~or~...~or~a_j)=k$,其中xor表示二进制异或,or表示二进制或。
输入输出格式
输入格式:

第一行两个整数n、k。

第二行n个整数$a_1,a_2...a_n$。

输出格式:

输出合法的(i,j)的对数。

输入输出样例
输入样例#1: 复制

5 6
2 4 3 4 2

输出样例#1: 复制

8
说明
对于30%的数据,$n \leq 500$。
对于60%的数据,$n \leq 100000$。
对于100%的数据,$1 \leq n,a_i \leq 500000$。

先枚举左端点,显然随着右端点右移,gcd不会增加,or不会减小

而且gcd每次减小最大为原来1/2,所以相同的gcd共可以分成logn块,实际上远远达不到

还有一个性质a^b^a=b

所以gcd^or^gcd=k^gcd=or

这样对于gcd相同的区间,用二分求出符合条件的or数量

用ST表维护x~y的gcd和or,而且了log要预处理,这样会快一些

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long lol;
int GCD[][],OR[][],Log[],n,k;
lol ans;
int gcd(int a,int b)
{
if (!b) return a;
return gcd(b,a%b);
}
int getg(int x,int y)
{
int d=Log[(y-x+)];
return gcd(GCD[x][d],GCD[y-(<<d)+][d]);
}
int getor(int x,int y)
{
int d=Log[(y-x+)];
return OR[x][d]|OR[y-(<<d)+][d];
}
int find(int x,int l,int g)
{
int r=n,as=l;
while (l<=r)
{
int mid=(l+r)/;
int G=getg(x,mid);
if (G==g) as=mid,l=mid+;
else r=mid-;
}
return as;
}
void query(int d,int x,int l,int r)
{
int L=l,R=r,as1=,as2=-;
while (l<=r)
{
int mid=(l+r)/;
int o=getor(x,mid);
if (o==d) as1=mid,r=mid-;
if (o<d) l=mid+;
if (o>d) r=mid-;
}
while (L<=R)
{
int mid=(L+R)/;
int o=getor(x,mid);
if (o==d) as2=mid,L=mid+;
if (o<d) L=mid+;
if (o>d) R=mid-;
}
ans+=as2-as1+;
}
int main()
{int i,x,pos,j;
cin>>n>>k;
for (i=;i<=n;i++)
{
scanf("%d",&x);
GCD[i][]=x;
OR[i][]=x;
}
for (i=;i<=n;i++)
Log[i]=Log[i/]+;
for (i=;i<=;i++)
{
for (j=;j<=n;j++)
if (j+(<<i)-<=n)
{
GCD[j][i]=gcd(GCD[j][i-],GCD[j+(<<i-)][i-]);
OR[j][i]=OR[j][i-]|OR[j+(<<i-)][i-];
}
}
for (i=;i<=n;i++)
{
for (j=i;j<=n;j=pos+)
{
int g=getg(i,j);
pos=find(i,j,g);
query(g^k,i,j,pos);
}
}
cout<<ans;
}

洛谷3794 签到题IV的更多相关文章

  1. A 洛谷 P3601 签到题 [欧拉函数 质因子分解]

    题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...

  2. 洛谷P3601签到题(欧拉函数)

    题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...

  3. 洛谷 P3601 签到题

    https://www.luogu.org/problemnew/show/P3601 一道关于欧拉函数的题. 读完题目以后我们知道所谓的$aindao(x)=x- \phi (x) $. 对于x小的 ...

  4. [Luogu 3794]签到题IV

    Description 题库链接 给定长度为 \(n\) 的序列 \(A\).求有多少子段 \([l,r]\) 满足 \[ \left(\gcd_{l\leq i\leq r}A_i\right) \ ...

  5. 洛谷P3601 签到题

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  6. 洛谷P3764 签到题 III

    题目背景 pj组选手zzq近日学会了求最大公约数的辗转相除法. 题目描述 类比辗转相除法,zzq定义了一个奇怪的函数: typedef long long ll; ll f(ll a,ll b) { ...

  7. 【noip】跟着洛谷刷noip题2

    noip好难呀. 上一个感觉有点长了,重开一个. 36.Vigenère 密码 粘个Openjudge上的代码 #include<cstdio> #include<iostream& ...

  8. [洛谷P1707] 刷题比赛

    洛谷题目连接:刷题比赛 题目背景 nodgd是一个喜欢写程序的同学,前不久洛谷OJ横空出世,nodgd同学当然第一时间来到洛谷OJ刷题.于是发生了一系列有趣的事情,他就打算用这些事情来出题恶心大家-- ...

  9. 洛谷P5274 优化题(ccj)

    洛谷P5274 优化题(ccj) 题目背景 CCJCCJ 在前往参加 Universe \ OIUniverse OI 的途中... 题目描述 有一个神犇 CCJCCJ,他在前往参加 Universe ...

随机推荐

  1. Hibernate——配置并访问数据库

    Hibernate,对于java来说很重要的一个东西,用于持久层.之前看了很多配置的,都不行,自己来写一个配置成功的. 环境:jdk1.8,eclipse-jee-oxygen,mysql-conne ...

  2. 使用MVC5+Entity Framework6的Code First模式创建数据库并实现增删改查功能

    此处采用VS2017+SqlServer数据库 一.创建项目并引用dll: 1.创建一个MVC项目 2.采用Nuget安装EF6.1.3 二.创建Model 在models文件夹中,建立相应的mode ...

  3. 201621123040《Java程序设计》第十周学习总结

    1.本周学习总结 2.书面作业 2.1常用异常 2.1.1自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 算术异常ArithmeticException(除数为0的情况) 类 ...

  4. 实验四:Android 开发基础

    实验四:实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 张旭升 学号:20162329 指导教师:娄嘉鹏 王志强 实验日期:5月26日 实验密级: 非密级 预习程度: 已预习 必修/选修 ...

  5. pymysql 多字段插入

    d = {'name':'alx','age':18,'pp':11,'cc':12} sql = '''insert into xx(%s) value(%s)''' key_list = [] v ...

  6. Linux 帳號管理與 ACL 權限設定

    1. Linux 的账号与群组1.1 使用者识别: UID 与 GID1.2 使用者账号:/etc/passwd, /etc/shadow1.3 关于群组: 有效与初始群组. groups, newg ...

  7. bzoj千题计划245:bzoj1095: [ZJOI2007]Hide 捉迷藏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1095 查询最远点对,带修改 显然可以用动态点分治 对于每个点,维护两个堆 堆q1[x] 维护 点分树 ...

  8. 故障公告:IIS应用程序池停止工作造成博客站点无法访问

    非常抱歉,今天凌晨博客站点负载均衡中所有3台服务器的IIS应用程序池突然停止工作,造成 1:20-7:45 左右博客站点无法正常访问,由此给您带来很大的麻烦,请您谅解. 服务器操作系统是 Window ...

  9. 码农、黑客和2B程序员之间的区别

    码农: 黑客: 2B程序员: 求2的32次方: 码农: System.out.println(Math.pow(2, 32)); 黑客: System.out.println(1L<<32 ...

  10. django报错Manager isn't accessible via UserInfo instances

    出现这种错误是因为调用模型对象时使用了变量名,而不是对象名(模型类),例如: user = UserInfo()user_li = user.objects.filter(uname=username ...