CF--832--D

关键

这美妙的模拟,我写的和屎一样,写了一个小时,都没出来
1.只需要记录前缀就可以了,不需要适用vector进行二分查找
2.只需要看l或r是否为0就可以了,不需要去二分查找

代码

//只需要判断前缀或者后缀的题目,直接记录就行了,二分查找好麻烦的,模拟了半天也每出来
#include <bits/stdc++.h>
using namespace std;
const int M=2e5+5;
int a[M],s[M];
int pre[M];
int cnt[M];
int main() {
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,m;
cin>>n>>m;
map<int,int>mp[2];
for(int i=1;i<=n;i++) {
cin>>a[i];
s[i]=s[i-1]^a[i];
cnt[i]=cnt[i-1]+(a[i]!=0);
int x=i%2;
if(mp[x^1].count(s[i]))pre[i]=mp[x^1][s[i]]+1;//记录前缀,也就是上一个区间
mp[x][s[i]]=i;//把这个位置进行更新
}
for(int i=1;i<=m;i++) {
int l,r;
cin>>l>>r;
if(s[r]^s[l-1])cout<<"-1\n";
else if(cnt[r]==cnt[l-1])cout<<"0\n";
else if((r-l+1)%2==1)cout<<"1\n";
else if(a[l]==0||a[r]==0)cout<<"1\n";//对呀,只需要判断那两个位置就可以了,我真是sb
else if(pre[r]>=l)cout<<"2\n";
else cout<<"-1\n";
}
return 0;
}
posted @   basicecho  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示