题目描述

给定一个长度为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. C语言博客作业--数据类型

    一.PTA实验作业 题目1:7-8 判断合法标识符 1. 本题PTA提交列表 2. 设计思路 1.定义整数型变量repeat和i来存放判断字符串是否为合法标识符的次数,定义字符型ch来存放读取的字符 ...

  2. django获取ip与数据重复性判定

    获取ip if request.META.has_key('HTTP_X_FORWARDED_FOR'): ip_c = request.META['HTTP_X_FORWARDED_FOR'] el ...

  3. python 操作PostgreSQL

    pip install psycopg Python psycopg2 模块APIs 以下是psycopg2的重要的的模块例程可以满足Python程序与PostgreSQL数据库的工作. S.N. A ...

  4. nyoj 概率计算

    概率计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 A和B两个人参加一场答题比赛.比赛的过程大概是A和B两个人轮流答题,A先答.一旦某人没有正确回答问题,则对手 ...

  5. iis / asp.net 使用 .config 和 .xml 文件的区别

    由于在项目中有同学使用后缀为 .xml 的文件作为配置文件,而配置文件中有一些敏感信息被记录,如接口地址,Token,甚至还有数据库连接字符串. 以前都没想过为何微软会使用.config 的后缀在作为 ...

  6. linux的链接工具secure设置字体大小和颜色

  7. Java基础类库简介

    Java基础类库简介 一.常用的基础类库:11个jar(Java Archive,Java归档)包 作为java语言使用者,我们可以感受到java语言带来的优势(平台无关.面向对象.多线程.高效易扩展 ...

  8. SpringBoot单元测试中的事务和Session

    1.Springboot中使用junit编写单元测试,并且测试结果不影响数据库. 2.

  9. 新概念英语(1-1)Excuse me!

    Excuse me!Whose handbag is it? A:Excuse me! B:Yes? A:Is this your handbag? B:Pardon? A:Is this your ...

  10. 浅显易懂的谈一谈python中的装饰器!!

    hello大家好~~我是稀里糊涂林老冷,一天天稀里糊涂的. 前一段时间学习了装饰器,觉着这东西好高大上哇靠!!哈哈,一定要总结一下,方便以后自己查阅,也希望帮助其他伙伴们共同进步! 装饰器: 大家可以 ...