题目

给出一个长度为\(n\)的数列\(a\),求

\[\sum_{i=1}^n\sum_{j=i}^n[\gcd(a_{i\sim j})\;xor\;or(a_{i\sim j})=k]
\]

分析

考虑如何优化这个\(O(n^2logn)\)的方法,显然无论是\(\gcd\)还是\(or\)都有连续位置答案是一定的

考虑每次在后面加入一个数后,从1开始更新\(\gcd\)和\(or\),如果遇到\(\gcd\)或者\(\or\)相同的一段,用链表将其合并

如果\(gcd\)下一个位置在\(or\)下一个位置之前那么跳到下一个\(gcd\),否则跳到下一个\(or\),我不会证明,但是时间复杂度应该是\(O(nlogn)\)


代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N=500011; long long ans;
int Gcd[N],Or[N],a[N],n,k,Guf[N],Gre[N],Ouf[N],Ore[N];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline signed min(int a,int b){return a<b?a:b;}
inline signed gcd(int a,int b){return !b?a:gcd(b,a%b);}
inline void doit(int ed){
for (rr int st=1;st<=ed;){
Gcd[st]=gcd(Gcd[st],a[ed]),Or[st]|=a[ed];
if (Gcd[st]==(Or[st]^k)) ans+=min(Guf[st],Ouf[st])-st;//这一段都是答案
if (Gcd[st]==Gcd[Gre[st]]) Guf[Gre[st]]=Guf[st],Gre[Guf[st]]=Gre[st];//gcd相等合并
if (Or[st]==Or[Ore[st]]) Ouf[Ore[st]]=Ouf[st],Ore[Ouf[st]]=Ore[st];//or相等合并
if (Guf[st]<Ouf[st]) Or[Guf[st]]=Or[st],Ouf[Guf[st]]=Ouf[st],Ore[Guf[st]]=Ore[st];//先把原先合并的段拆成两部分
if (Guf[st]>Ouf[st]) Gcd[Ouf[st]]=Gcd[st],Guf[Ouf[st]]=Guf[st],Gre[Ouf[st]]=Gre[st];//同上
st=min(Guf[st],Ouf[st]);//跳到下一个
}
}
signed main(){
n=iut(),k=iut();
for (rr int i=1;i<=n;++i) Gcd[i]=Or[i]=a[i]=iut();
for (rr int i=1;i<=n;++i) Gre[i]=Ore[i]=i-1,Guf[i]=Ouf[i]=i+1;//链表
for (rr int i=1;i<=n;++i) doit(i);
return !printf("%lld",ans);
}

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

  1. 洛谷3794 签到题IV

    题目描述 给定一个长度为n的序列$a_1,a_2...a_n$,其中每个数都是正整数. 你需要找出有多少对(i,j),$1 \leq i \leq j \leq n$且$gcd(a_i,a_{i+1} ...

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

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

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

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

  4. 洛谷 P3601 签到题

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

  5. [Luogu 3794]签到题IV

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

  6. 洛谷P3601 签到题

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

  7. 洛谷P3764 签到题 III

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

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

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

  9. [洛谷P1707] 刷题比赛

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

  10. 洛谷P5274 优化题(ccj)

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

随机推荐

  1. 项目实战:Qt+OpenCV激光射击游(识别激光、识别圆)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  2. 【LeetCode动态规划#03】整数拆分(数学题)

    整数拆分 力扣题目链接(opens new window) 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化. 返回你可以获得的最大乘积. 示例 1: 输入: 2 输出: 1 ...

  3. JVM内存模式

    Java内存模型即Java Memory Model,简称JMM. JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式.JVM 是整个计算机虚拟模型,所以 JMM 是隶属于 JV ...

  4. C++ //list容器 构造函数 //list赋值和交换 //list容器大小操作 //list插入和删除,移除 //清空 //list数据存取back(); front() //list 反转和排序

    1 //list容器 构造函数 //list赋值和交换 //list容器大小操作 2 //list插入和删除,移除 //清空 //list数据存取back(); front() 3 //list 反转 ...

  5. ACS 构词法 + 44个后缀 记忆方法

    抖音号:九词君-不用语法学好英语

  6. Editor - Goto Location: Multiple Definitions - vscode 多个定义,直接跳转到主定义 不进行选择

    Editor - Goto Location: Multiple Definitions - vscode 多个定义,直接跳转到主定义 不进行选择 配置里面 搜 多

  7. Windows 安装 Rust 并设置镜像加速

    目录 下载rustup-init.exe(Rust安装工具) 使用镜像加速rustup安装 安装Rust 安装标准库源码 使用镜像加速cargo包下载 安装结果确认 更新.卸载和文档查看 参考文档 下 ...

  8. kettle教程--通过配置文件同步所需要的列数据

    kettle教程--通过配置文件同步所需要的列数据 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章, 关注回复「kettle」, 免费领取全网最热的kettle实战视频教程 ht ...

  9. stream使用汇总

    整理了下java使用stream处理list的几个便捷的方法 准备数据 List<KnowledgeInfoTable> knowledgeInfoTables = knowledgeIn ...

  10. c语言之被遗漏的角落---#pragma pack

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...