LG·选数字【容斥】

2020年11月3日提高组 【校测】luogu U138404 选数字

Description–

> l i n k link link

N N N 个数字,会问 Q Q Q 个问题,对于每个问题要求从中选出 3 3 3 个数字,使得这 3 3 3 个数字的按位或的结果恰好等于 x x x,每次选的 3 3 3 个数字只能在从左往右的第 l l l 个数到第 r r r 个数之间选择,输出符合要求的方案数。


Input–

第一行两个数 N N N Q Q Q 第二行 N N N 个数,按照从左到右的顺序给出桌面上的数字接下来 Q Q Q 行,每行 3 3 3 个数字,分别为 l , r , x l,r,x l,r,x

Output–

Q Q Q 行,每行一个数表示方案数


Sample Input–

10 5
2 4 3 7 6 9 8 7 10 15
1 5 7
2 8 14
3 5 7
1 10 15
6 9 12

Sample Output–

9
1
1
81
0

说明–

样例解释
第一个询问,选择范围为 2 , 4 , 3 , 7 , 6 {2,4,3,7,6} 2,4,3,7,6。除了选 2 , 4 , 6 2,4,6 2,4,6 不行,剩下 9 9 9 种方案均可以

数据范围
对于 20 % 20\% 20% 的数据, n , Q ≤ 100 n,Q≤100 n,Q100
对于 60 % 60\% 60%的数据, n , Q ≤ 10000 n,Q≤10000 n,Q10000
对于 100 % 100\% 100%的数据, 1 ≤ l ≤ r ≤ n ≤ 1 0 5 , 1 ≤ Q ≤ 1 0 5 , 1 ≤ 1≤l≤r≤n≤10^5,1≤Q≤10^5,1≤ 1lrn105,1Q105,1桌面上每个数字 , x ≤ 255 ,x≤255 ,x255


解题思路–

F [ i , j ] F[i,j] F[ij] 表示区间 ( 1 , i ) (1,i) (1i) 中有多少个数 或 j = j j=j j=j
其中所有 i i i 的二进制相差奇数个 b i t bit bit 的容斥系数为 − 1 -1 1,偶数个 b i t bit bit 的为 + 1 +1 +1


代码–

#include <iostream>
#include <cstdio>

using namespace std;

int n, q, l, r, x, a, rc[100005];
long long ans, f[100005][300];

long long cal(long long z)
{
	return z * (z - 1) * (z - 2) / 6;
}

int main()
{
	scanf("%d%d", &n, &q);
	rc[0] = 1, rc[1] = -1;
	for (int i = 2; i <= 255; ++i)
	  rc[i] = rc[i >> 1] * rc[i & 1];
	for (int i = 1; i <= n; ++i)
	{
		scanf("%d", &a);
		for (int j = 0; j <= 255; ++j)
		  if ((a | j) == j)
		    f[i][j] = f[i - 1][j] + 1;
		  else f[i][j] = f[i - 1][j];
	}
	for (int i = 1; i <= q; ++i)
	{
		scanf("%d%d%d", &l ,&r, &x);
		ans = 0;
		for (int j = x; j; j = (j - 1) & x)
		  ans += rc[x] * rc[j] * cal(f[r][j] - f[l - 1][j]);
		printf("%lld\n", ans);
	}
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值