首页 > 其他分享 >选数异或

选数异或

时间:2024-02-17 22:33:05浏览次数:37  
标签:std last int 选数 异或 oplus dp

引言

题目链接:https://www.luogu.com.cn/problem/P8773

思路

令 dp[i] 表示以 i 结尾且前 i 个中满足 \(a_j \oplus a_k = x\) 的数对中左侧数最靠近右侧的位置。

假设有 \(a_1 \oplus a_2 = x\) 且 \(a_4 \oplus a_6 = x\)

则 dp[3] = 1, dp[7] = 4

那么给出区间后只需要判断 dp[r] 是否大于 l 即可判断是否满足条件。

代码

#include <bits/stdc++.h>
#define N 100010

int a[N];
std::map<int,int> dp,last;

int main() {
	int n,m,x;
	std::cin >> n >> m >> x;

	for (int i = 1 ; i <= n ; i ++ ) {
		std::cin >> a[i];
		dp[i] = std::max(dp[i-1],last[a[i]^x]);
		last[a[i]] = i;
	}

	while(m -- ) {
		int l,r;
		std::cin >> l >> r;

		if(dp[r] < l) std::cout << "no\n";
		else std::cout << "yes\n";
	}

	return 0;
}

标签:std,last,int,选数,异或,oplus,dp
From: https://www.cnblogs.com/NachoNeko/p/18018561

相关文章

  • 异或和之和
    引言题目链接:https://www.luogu.com.cn/problem/P9236思路首先暴力的做法是求出其前缀异或数组sum,之后将其两两异或,结果相加,其时间复杂度为O(n^2)假设所有sum的二进制的第i位为a个1和b个0,那么根据异或的性质,1和1,0和0的异或结果为0,不影响结果。那么对结果......
  • 异或和之和
    数论典题,拆成二进制位进行分析,首先用计算异或前缀和,便于区间操作,对于区间[L,R],其区间异或值为$Xor[L-1]⊕Xor[R]$,统计区间的在第$i$位为$1$的个数,那么根据乘法原理,有$cnt$个$1$和剩余的$0$组合,然后这个是算出了有多少种方案让当前这一位有贡献,要算出答案需要对cnt[i]......
  • Codeforces Round 770 (Div. 2)(数学异或奇偶性)
    B.FortuneTelling拿到题目看数据范围之后就知道暴力显然是来不及的。那么只能找性质。\(考虑x和x+3的不同\quad奇偶性不同\)\(然后考虑两种操作对于一个数的奇偶性的影响\)\(加法:同奇偶则运算结果是偶,不同则运算结果为奇\)\(异或:惊奇的发现异或也是这样的\)这样我们就......
  • 洛谷题单指南-暴力枚举-P1036 [NOIP2002 普及组] 选数
    原题链接:https://www.luogu.com.cn/problem/P1036题意解读:题目即要在n个数中,枚举出所有的子集,当子集中数字个数刚好为k时,求和,判断是否是素数。解题思路:方法一:二进制法通过二进制法,可以枚举一个集合中所有元素“选”或者“不选”的情况,用二进制1表示选该元素,二进制0表示不选。......
  • C# 对数值进行与,或,异或操作的学习理解
    //&符号是and,与,一个为0都是0,全部为1才是1//1&1=1,1&0=0,1与任何数都是任何数//0&1=0,0&0=0,0与任何数都是0varnum1=0b_1010_1010_1010;varnum2=0b_1111_0000;//保留num1二进制中4-7位Conso......
  • 异或运算的性质
    异或是一种基于二进制的位运算,用符号XOR或者^表示。性质1、交换律2、结合律:即(a^b)^c==a^(b^c))3、对于任何数x,都有x^x=0,x^0=x,x^1=x'。即一位数(假设是a),与自身异或,一定等于0; 与0异或-->等于本身;  与1异或---->等于a'。4、自反性A^B^B=A^0=A异或运算最常见于多项......
  • CF-1831-E-卡特兰数+异或哈希+差分
    1831-E题目大意给定一个整数\(n\),和\(k\)个区间,区间端点范围在\([1,n]\)内。如果有一个长为\(n\)合法的括号序列,且它的这\(k\)个区间\([l,r]\)中的子括号序列也是合法的,那么称这个括号序列是“好的”。请你求出有多少个长度为\(n\)的“好的”括号序列,答案对\(998244353\)取模......
  • 洛谷 P9745 「KDOI-06-S」树上异或 题解
    Solution树形DP好题。PartI部分分类比下文为简单,我们称一个连通块的权值为连通块内点的异或和。考虑链的部分分,显然可以设\(f_{i}\)是前\(i\)个点所有断边方案的权值和,对于每个点枚举上一条断的边转移。令\(s_i=\bigoplus_{j=1}^{i}a_j\),则\(f_i=\sum_{j=0}^{i-1}(s......
  • 最大异或和 可持久化数据结构入门
    最大异或和题目描述给定一个非负整数序列\(\{a\}\),初始长度为\(N\)。有\(M\)个操作,有以下两种操作类型:Ax:添加操作,表示在序列末尾添加一个数\(x\),序列的长度\(N\)加\(1\)。Qlrx:询问操作,你需要找到一个位置\(p\),满足\(l\lep\ler\),使得:\(a[p]\oplusa[p+1]......
  • 刷题 位运算异或 异或前缀和
    2024.1.18杭州电子科技大学2023华为杯编程竞赛 解题思路首先可以知道,我们任意选一点为根root往下递归异或就可以得到f[i](root到i的路径异或值),那么 l到r的路劲异或值可以由f[l]^f[r]得出那么如何计算答案呢,就是用f[l]~f[r]分别异或f[x]......