题目

给出一个长度为\(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. 导致Redis访问慢的常见操作

    导致Redis访问慢的原因通常有2个方面: 第一,Redis本身性能出现了瓶颈,如:内存使用率过高,并发过大等 第二,存在大KEY,或者客户端访问命令使用不当引起的阻塞 在此,只列举因为的客户端命令使 ...

  2. 时序数据库timescaleDB安装

    一:前言相关 环境:Red Hat 8.3.1-5安装程序:PostgreSQL 14.1,TimescaleDB 2.5.1,cmake3.22.1PostgreSQL编译安装需要cmake3.4以 ...

  3. Anaconda下载安装步骤

    下载地址 下载比较慢的,用迅雷下,点击复制地址,然后在迅雷里面直接创建连接 Anaconda基于python3.8 Anaconda基于python3.6的 安装步骤 没啥说的,一路安装,中间有个勾选 ...

  4. 【webserver 前置知识 02】Linux网络编程入门其一

    网络结构模式 C/S结构 服务器 - 客户机,即 Client - Server(C/S)结构.C/S 结构通常采取两层结构.服务器负责数据的管理,客户机负责完成与用户的交互任务.客户机是因特网上访问 ...

  5. 运行python的几种方式

    1. 通过cmd终端去运行 按住win + r 打开命令提示符,然后输入python,就可以进入python环境,输入你需要指定的python代码即可. # 注意:这种方法只是建议临时使用一下,因为午 ...

  6. DataGear 自定义数据可视化图表

    DataGear内置了很多常用的图表(折线图.柱状图.饼图.散点图.雷达图.地图等等),能满足大部分数据可视化需求,当内置图表无法满足时,则可以通过自定义图表或插件的方式,实现特定业务的数据可视化需求 ...

  7. 微信小程序测试点,9大方面全方位总结

    微信小程序无需下载安装,用户在微信扫一扫或搜索即可使用,小程序版本类型可分为:开发版.体验版.正式版. 开发版.体验版无需审核,只需要给微信号权限,经过扫小程序的二维码就能访问,正式版本需要经过微信审 ...

  8. For 循环跟yield区别?

    for循环遍历一个万亿级别的长列表,会将这个列表的全部数据载入到内存中去,如果你的内存很小就会溢出,即使是内存很大,这个操作也是十分占用资源的. 而使用生成器,则会将数据的状态(例如:遍历到列表的哪个 ...

  9. Codeforces Round 770 (Div. 2)(数学异或奇偶性)

    B. Fortune Telling 拿到题目看数据范围之后就知道暴力显然是来不及的. 那么只能找性质. \(考虑x和x+3的不同 \quad 奇偶性不同\) \(然后考虑两种操作对于一个数的奇偶性的 ...

  10. TimeLine 时间轴 网站 分享 time.graphics - nodejs 10年图

    话说20年 弹指一挥间 https://time.graphics/line/682014 nodejs 10年图 https://time.graphics/line/598790 资料 2022, ...