CF 1968 F. Equal XOR Segments (*1800) 思维

news/2024/9/29 8:54:38

CF 1968 F. Equal XOR Segments (*1800) 思维

题意

给你一个长度为 \(n\) 的数组,如何可以把数组分成 \(k(k>1)\) 组,并且使得每组的异或和相等,那么这个数组就是完美的。现在给你 \(q\) 组询问,每次给你 \(l,r\) 。请你判断 \(a_l\)\(a_r\) 之间是否是完美的。

思路

对于每次询问,不妨我们令 \(a_l \oplus a_{l+1} \oplus... \oplus a_{r-1} \oplus a_r=S\)

显然如果 \(S=0\) ,那么我们一定可以分成两组。

接着考虑 \(S!=0\) 的情况,首先一定只能分成奇数组,并且每组的异或和都为 \(S\), 那么我们只用考虑能否分成三组即可。因为其他组数的情况,我们都可以通过合并来变成三组的情况。

首先,我们需要维护一下前缀异或和,并且维护每个前缀异或和值出现的所有位置。(可以开一个map套vector即可,这个东西真的超级好用)。接下来我们只需要在对应的vector中二分找到对应位置即可。判断一下边界即可。

代码

#include<bits/stdc++.h>using namespace std;#define ff first
#define ss second
#define pb push_back
#define all(u) u.begin(), u.end()
#define endl '\n'
#define debug(x) cout<<#x<<":"<<x<<endl;typedef pair<int, int> PII;
typedef long long LL;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 10, M = 105;
const int mod = 1e9 + 7;
const int cases = 1;void Showball(){int n,q;cin>>n>>q;vector<int> a(n+1),s(n+1);for(int i=1;i<=n;i++){cin>>a[i];s[i]=s[i-1]^a[i];}map<int,vector<int>> mp;for(int i=0;i<=n;i++) mp[s[i]].pb(i);while(q--){int l,r;cin>>l>>r;int S=s[r]^s[l-1];if(!S){cout<<"YES\n";continue;}auto it=lower_bound(all(mp[S^s[l-1]]),l);if(it==mp[S^s[l-1]].end()||*it>=r){cout<<"NO\n";continue;}int p=*it;it=lower_bound(all(mp[S^s[p]]),p+1);if(it==mp[S^s[p]].end()||*it>=r){cout<<"NO\n";continue;}int q=*it;cout<<(s[r]^s[q]==S?"YES\n":"NO\n"); }cout<<endl;
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int T=1;if(cases) cin>>T;while(T--)Showball();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/49091.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

解读MySQL 8.0数据字典的初始化与启动

MySQL 8.0新设计实现的数据字典,解决了之前版本的数据字典冗余,DDL原子性、crash safe等问题。本文分享自华为云社区《MySQL全文索引源码剖析之Insert语句执行过程》,作者:GaussDB 数据库。 本文主要介绍MySQL 8.0数据字典的基本概念和数据字典的初始化与启动加载的主要流程…

中电金信:财务公司数字化转型的“求索”路径与实践分享

​随着全球商业环境的快速变化和国家对数字化发展的高度重视,数字化转型已成为推动经济高质量发展的关键。央国企财务公司的数字化建设程度较商业银行存在很大差距,数字化转型“路漫漫其修远兮”。如何借“数字之力”实现世界一流财务管控体系的总目标,是财务公司要认真思考…

win10 安装cab 补丁

cab文件时win压缩格式,无法直接安装.第一步: 下载dism++ , 如电脑管家中软件管理下载 第二步: 双击 Dism++x86 运行 第三步: 点击更细管理-导入文件

RK3568开发笔记(三):瑞芯微RK3588芯片介绍,入手开发板的核心板介绍

前言目前主流国产芯片为RV11XX、RK33XX、Hi35XX系列,本系列开启RK3588系列的技术教程笔记分享。  本篇主要介绍RK3588芯片和入手开发板的核心板详细介绍。 RK3588芯片介绍简介RK3588,作为瑞芯微电子(Rockchip)旗下的高性能应用处理器芯片,自发布以来便凭借其卓越的性能和…

《最新出炉》系列入门篇-Python+Playwright自动化测试-52- 字符串操作 - 下篇

1.简介 在日常的自动化测试工作中进行断言的时候,我们可能经常遇到的场景。从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言。这个时候就需要我们对字符串进行操作,宏哥这里介绍两种方法:正则和字符串切片函数split()。 2.测试场景 …

【SQL】SQL中if条件的使用

count(if(a.STS = #{sts}, a.sts, null)) as scssCnt, sum(if(a.sts = #{sts}, a.amt, 0)) as scssAMtView Code[ 版权声明 ]: 本文所有权归作者本人,文中参考的部分已经做了标记! 商业用途转载请联系作者授权! 非商业用途转载,请标明本文链接及出处!

IIC驱动-基于EEPROM存储芯片AT24C02模块和三合一环境传感器AP3216C

本文将基于IIC协议编写EEPROM芯片AT24C02存储芯片的IIC驱动程序,本文内容将分为三个部分:imx6ull的IIC控制器介绍,AT24C02存储芯片介绍,IIC的Linux驱动程序编写。关于IIC协议的内容与介绍这里不展开,相关资料很多,可以自行去查阅,但是这里需要注意的是,IIC协议本身就是…

秒懂双亲委派机制

前言 最近知识星球中,有位小伙伴问了我一个问题:JDBC为什么会破坏双亲委派机制? 这个问题挺有代表性的。 双亲委派机制是Java中非常重要的类加载机制,它保证了类加载的完整性和安全性,避免了类的重复加载。 这篇文章就跟大家一起聊聊,Java中类加载的双亲委派机制到底是怎…