ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF617E XOR and Favorite Number 莫队

2021-03-02 08:32:22  阅读:180  来源: 互联网

标签:XOR ++ Favorite while 异或 pair 莫队 define


题意:

戳这里

分析:

板子题,没什么思维难度,但坑很多

tip:

  1. 和普通莫队不一样,异或时需要考虑 \(l-1\) 位置的前缀异或值
  2. 异或可能会使值变大,所以桶需要开到值域的 2 倍左右

代码:

#include<bits/stdc++.h>
#define pii pair<int,int>
#define mk(x,y) make_pair(x,y)
#define lc rt<<1
#define rc rt<<1|1
#define pb push_back
#define fir first
#define sec second
#define inl inline
#define reg register

using namespace std;

namespace zzc
{
	typedef long long ll;
	inline ll read()
	{
		ll x=0,f=1;char ch=getchar();
		while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
		while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
		return x*f;
	}
	
	const ll maxn = 1e5+5;
	const ll maxm = 4e6+5;
	const ll blo = 350;
	ll n,cnt=1,qt,k,num;
	ll bel[maxn],a[maxn],pre[maxn],ans[maxn],t[maxm];
	
	struct que
	{
		ll l,r,id;
		bool operator <(const que &b)const
		{
			return bel[l]==bel[b.l]?r<b.r:l<b.l;
		}
	}q[maxn];
	
	void add(int x)
	{
		int tmp=pre[x]^k;
		num+=t[tmp];
		t[pre[x]]++;	
	}
	
	void del(int x)
	{
		int tmp=pre[x]^k;
		t[pre[x]]--;
		num-=t[tmp];
	}
	
	void work()
	{
		n=read();qt=read();k=read();
		for(reg int i=1;i<=n;i++)
		{
			a[i]=read();pre[i]=pre[i-1]^a[i];
			if(i%blo==0) cnt++;
			bel[i]=cnt;
		}
		for(reg int i=1;i<=qt;i++)
		{
			q[i].l=read()-1;
			q[i].r=read();
			q[i].id=i;
		}
		sort(q+1,q+qt+1);
		int l=1,r=0;
		for(reg int i=1;i<=qt;i++)
		{
			while(q[i].l<l) add(--l);
			while(q[i].r>r) add(++r);
			while(q[i].l>l) del(l++);
			while(q[i].r<r) del(r--);
			ans[q[i].id]=num;
		}
		for(reg int i=1;i<=qt;i++) printf("%lld ",ans[i]);
	}

}

int main()
{
	zzc::work();
	return 0;
}

标签:XOR,++,Favorite,while,异或,pair,莫队,define
来源: https://www.cnblogs.com/youth518/p/14467075.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有