题目描述

给定一个长度为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. 网易云音乐APP分析

    网易云音乐-感受音乐的力量 你选择的产品是?  网易云音乐 为什么选择该产品作为分析? 之前用的一直是QQ音乐,但是有一天一个朋友分享了一首网易云上的音乐(顺便分享一下歌名:Drop By Drop) ...

  2. 转git取消commit

     如果不小心commit了一个不需要commit的文件,可以对其进行撤销. 先使用git log 查看 commit日志 commit 422bc088a7d6c5429f1d0760d008d8 ...

  3. bzoj千题计划276:bzoj4515: [Sdoi2016]游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=4515 把lca带进式子,得到新的式子 然后就是 维护树上一次函数取min 一个调了一下午的错误: 当 ...

  4. 【学习笔记】windows安装jhipster踏坑记录

    序: 入职新公司第二天了,本来第一天是配置环境来着,配了一下午也没搞成那个jhipster的安装,每次以为应该正常的时候都是不对,yo是yeoman的指令,但是我是使用yarn管理的yeoman 纠结 ...

  5. vue初尝试--新建项目

    这是一篇技术贴--如何新建一个基于vue的项目 1.下载对应版本的nodejs安装,下载的nodejs都集成了npm,所以nodejs安装完成之后npm也对应安装完成了. 安装完成之后可以在cmd命令 ...

  6. nat和napt技术

    私网IP地址是指内部网络或主机的IP地址,公网IP地址是指在因特网上全球唯一的IP地址. RFC 1918为私有网络预留出了三个IP地址块,如下: A类:10.0.0.0-10.255.255.255 ...

  7. linux查看文件内容的常见命令

    1.cat命令,显示文件的所有内容,内容过多则显示最后一屏一般用于内容较少文件 2.more命令,分页显示文件的内容一般用于文件内容过多的文件,回车显示下一行,空格显示下一页,q/Q退出 3.head ...

  8. ( 转 ) CORS 有一次 OPTIONS 请求的原理

    刚接触前端的时候,以为HTTP的Request Method只有GET与POST两种,后来才了解到,原来还有HEAD.PUT.DELETE.OPTIONS-- 目前的工作中,HEAD.PUT.DELE ...

  9. MQTT和paho(一)

    参考链接:http://blog.csdn.net/yangzl2008/article/details/8861069 一.mqtt 1.简单介绍 http://mqtt.org/software ...

  10. bugfree,CDbConnection 无法开启数据库连线: SQLSTATE[HY000] [2003] Can't connect to MySQL server on '192.168.0.99' (4)

    安装bugfree后,访问报错:CDbConnection 无法开启数据库连线: SQLSTATE[HY000] [2003] Can't connect to MySQL server on '19 ...