2021杭电多校第二场 1004——I love counting

利用Python实现FGO自动战斗脚本 Fate/Grand Order(非的肝不过欧的)作为索尼为了拯救自己不倒闭而开发的面向月厨的骗氪养成抽卡爆肝游戏,居然没有像隔壁《阴阳师》的自动战斗系统(看看别人现在都自带脚本了)。毕竟是懒得肝,就不妨写一个脚本来肝算了,省时省力。 开始 一个战斗脚本,其实可以算是AI的初步了。虽然只是暴力算出造成最大伤害的方案orz。 我们在这里不考虑释放 技能 、 宝具 和 暴击星 这三样非常重要的东西。... 阅读详情

题目大意

给你 nnn 个数的数列 vvv,有 mmm 次询问,询问 [l,r][l, r][l,r] 内满足 v⨁a≤bv \bigoplus a \leq bv⨁a≤b,不同的 vvv 有多少个

解题思路

莫队分块
分块大小 k=nk = \sqrt nk=n​
我们将询问按区间左端点分块,然后排序,先按块号排,如果块号相同按右端点升序排。
然后我们将 vvv 数组分块。

我们如何统计答案呢?我们用桶来统计数是否出现过。
我们对于每一个询问的区间从高位到地位考虑 bbb

我们记录一个变量 sss 使得我们已经枚举的位满足 s⨁a=bs \bigoplus a = bs⨁a=b

在每一位枚举前记录变量 p=sp = sp=s

当 bbb 的第 iii 位为 111
如果 aaa 的这一位为 111 那么我们让 ppp 这一位为 111。
如果 aaa 的这一位为 000 那么我们让 sss 这一位为 000即可。
此时 ppp 是合法的数的最小值,为了不对答案进行重复统计,我们统计 [p,p+(1<<i)−1][p, p+(1 << i) - 1][p,p+(1<<i)−1] 区间内有多少数即为对答案的贡献。 这是我们可以暴力计算,因为我们对数列 vvv 进行了分块,每次暴力计算复杂度是 O(n)O(\sqrt n)O(n​)

当 bbb 的第 iii 位为 000 那么我们让 sss 的这一位与 aaa 相同即可。
这样我们是没有计算 v⨁a=bv \bigoplus a = bv⨁a=b 的贡献,最后我们加一下即可。

总的复杂度是 O(m×n)O(m \times \sqrt n)O(m×n​) 主要是来自分块的后区间移动。

Code

#include <bits/stdc++.h>
#define ll long long
#define qc ios::sync_with_stdio(false); cin.tie(0);cout.tie(0)
#define fi first
#define se second
#define PII pair<int, int>
#define PLL pair<ll, ll>
#define pb push_back
using namespace std;
const int MAXN = 2e5 + 7;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const ll mod = 1e9 + 7;
inline int read()
{
    int 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;
}
int a[MAXN];
int n, m;
struct node{
	int l, r, a, b, idx;
	int bl;
	bool operator<(node p) const{
		if(bl != p.bl)
			return bl < p.bl;
		return r < p.r;
	}
};
int k;
int sum[MAXN]; // 前面所有块中出现的次数 桶
int c[MAXN]; // 当前块是否出现 桶
int cnt[MAXN]; // 所有数出现的次数
int ans[MAXN];
void add(int x){
	cnt[x] ++;
	if(cnt[x] == 1){
		sum[x/k]++;
		c[x]++;
	}
}
void del(int x){
	cnt[x]--;
	if(cnt[x] == 0){
		sum[x/k]--;
		c[x]--;
	}
}
int ask(int x){
	int ret = 0;
	for (int i = x / k * k; i <= x; ++i){
	    ret += c[i];
	}
	for (int i = 0; i <= x / k - 1; ++i){
	    ret += sum[i];
	}
	return ret;
}
void solve(){
	cin >> n;
	k = sqrt(n + 1);
	for (int i = 1; i <= n; ++i){
	    cin >> a[i];
	}
	cin >> m;
	vector<node> v;
	for (int i = 1; i <= m; ++i){
		node tmp;
		cin >> tmp.l >> tmp.r >> tmp.a >> tmp.b;
		tmp.idx = i;
		tmp.bl = (tmp.l + k - 1) / k;
		v.pb(tmp);
	}
	sort(v.begin(), v.end());
	int l = 1, r = 0;
	for(auto tmp : v){
		int nl = tmp.l , nr = tmp.r;
		while(nl < l) add(a[--l]);
		while(nl > l) del(a[l++]);
		while(nr < r) del(a[r--]);
		while(nr > r) add(a[++r]);
		int a = tmp.a, b = tmp.b;
		int s = 0;
		for(int i = 20; i >= 0; i--){
			if((b >> i) & 1){
				int p = s;
				if((a >> i) & 1)
					p |= (1 << i);
				else
					s |= (1 << i);
				ans[tmp.idx] += ask(p + (1 << i) - 1) - ask(p-1);
			}
			else
				s |= ((a >> i) & 1) << i;
		}
		ans[tmp.idx] += c[a^b];
	}
	for (int i = 1; i <= m; ++i){
		cout << ans[i] << endl;
	}
}

int main()
{
    #ifdef ONLINE_JUDGE
    #else
       freopen("in.txt", "r", stdin);
       freopen("out.txt", "w", stdout);
    #endif

    qc;
    int T;
    // cin >> T;
    T = 1;
    while(T--){

        solve();
    }
    return 0;
}

80、编程学习资源与x86知识全解析 本文详细介绍了编程学习中多个领域的优秀书籍和博客资源,涵盖逆向工程、C/C++、x86/x86-64架构、ARM、汇编语言、Java、UNIX、密码学等多个方向。同时,深入解析了x86架构的核心知识,包括术语、通用寄存器、FPU寄存器、SIMD寄存器、调试寄存器以及常用指令的使用方法和操作步骤。通过本文,读者可以系统地掌握底层编程知识,并应用于逆向工程、系统开发和性能优化等领域。 阅读详情

相关推荐

tree_sitter多语言解析器配置实战指南

本文是一份详细的Tree-sitter多语言解析器配置实战指南。文章从零开始,手把手指导如何搭建Python环境、安装指定版本的tree-sitter库、下载并编译多种语言的语法规则,最终构建一个统一的解析器库。通过实战代码演示了如何初始化解析器、解析代码并遍历语法树,旨在帮助开发者高效处理多语言代码分析任务,并分享了高级技巧与常见问题排坑经验。

weixin_29245767的博客 267

2021杭电多校第二场1004.I love counting

1004.I love counting ​ zrr12138 补题地址 题目大意: ​ 给出n个数,q次询问,每次询问l-r区间有多少个不同的数异或a小于b 1≤n,q≤105,1≤l≤r≤n,0≤a,b≤n+1 1 \leq n,q\leq10^5,1 \leq l \leq r\leq n,0 \leq a,b\leq n+1 1≤n,q≤105,1≤l≤r≤n,0≤a,b≤n+1 题解: ​ 先考虑这样一个子问

qq_45622214的博客 494

Unity UI适配核心:Canvas Scaler模式解析与2023版避坑指南

UI适配是游戏与应用开发中的基础挑战,其核心在于确保界面元素在不同屏幕分辨率与设备上保持视觉一致与功能可用。原理上,系统通过坐标转换与缩放计算,将设计稿的布局映射到物理屏幕。技术价值在于提升用户体验的一致性与产品的跨平台兼容性。应用场景广泛覆盖手游、PC端应用及各类交互界面。本文聚焦Unity引擎中的Canvas Scaler组件,深入剖析其Scale With Screen Size等模式的工作原理,并结合锚点设置、安全区域处理等高频搜索热词,提供解决UI错位、拉伸及异形屏适配等常见问题的工程实践方案,帮

weixin_30920597的博客 622

HDU I love counting(莫队+字典树)

题目链接:Problem - 6964 (hdu.edu.cn) 题意:n个数的序列,每个位置都有一个权值c,进行Q次询问,每次询问给定一个区间(l,r)和两个数字a,b,问这个序列有多少种权值c满足c异或a<=b?

asiip的博客 295

PCL 使用RANSAC拟合平面【2026最新版】

RANSAC拟合平面算法原理和实现流程详解以及最大迭代次数和内点期望概率的设置方法。最后再对拟合后的平面法向量与向量(1,1,1)进行定向。博客长期更新,最近一次更新时间为:2026年4月24日。

点云侠的博客 42万+

【硬件工程师面经整理18_Smith圆图】

若文中任何内容侵犯了您的合法权益,请相关权益人及时与我联系,我将立即进行核实并采取适当措施,包括但不限于删除相关内容或更新文章以消除影响。**在Smith圆图上,源阻抗表示为圆心,而负载阻抗表示为圆图上的一个点。具体来说,通过将负载阻抗在Smith圆图上移动到特定位置,使其与传输线特性阻抗形成纯电阻或纯电抗的组合,从而实现匹配。例如,反射系数表示为Smith圆图上的一个点,而驻波比则表示为圆图上两个点之间的距离。Smith圆图是用于阻抗匹配和网络分析的工具,它是一种将复阻抗表示为坐标的图形。

LeeYLong的博客 651

2021杭电多校第二场 I love counting

I love counting 题目链接 题意 给定一个含有n个元素的数组C。 对这个数组进行查询操作,每次查询给出四个值L、R、a和b。 问L--R之间有多少种ccc​使得,(c 异或 a)≤b(c\ 异或\ a)\le b(c 异或 a)≤b​。(如果Ci=Cj=cC_i=C_j=cCi​=Cj​=c​,则只算作一种) 思路 这道题和思路和杭电第一场的Xor sum很像(01字典树),最好把上一场的补了再看这一题,这一题比上一题更麻烦,因为还得用到树状数组。Xo

Moyan的博客 724

DeepSeek-OCR安装部署文档和避坑指南,包含大多数人遇到的安装报错问题

DeepSeek-OCR安装部署指南摘要:本文详细介绍高性能OCR工具DeepSeek-OCR的安装流程,支持多语言识别和复杂场景文字提取。系统要求包括Linux/Windows/macOS操作系统,推荐NVIDIA显卡(显存≥6GB)和≥16GB内存。安装步骤涵盖:1)创建conda虚拟环境;2)安装PyTorch等核心依赖;3)解决常见问题如CUDA版本冲突、模型下载慢等。提供GPU内存不足等问题的解决方案,帮助开发者快速部署OCR服务。(149字)

yolo模型训练找我,AI游戏合作找我 2943

莫队 ---- 值域分块处理优化字典树上的查询 杭电多校2021第二场1004 i love counting

题目链接 题目大意: 就是给你nnn个数,mmm次询问 每次询问给你l,r,a,bl,r,a,bl,r,a,b问你在[l,r][l,r][l,r]区间里面有多少种种种数c(XOR)a≤bc(XOR)a\leq bc(XOR)a≤b 解题思路: 这里我们对两个东西进行分块,首先是查询区间分块,然后按照块排序就是莫队了,但是值域怎么维护呢? 我们对值域进行分块把[1,1e5][1,1e5][1,1e5]的值域分成1e5\sqrt {1e5}1e5​块,每个块统计里面的数的种类!! 但是如何查询异或满足上面条

weixin_45630722的博客 284

Python爬虫实战:爬取携程旅游平台数据,我拆解了动态反爬+Cookie续命(附完整可运行代码)

反爬类型表现形式应对思路sign参数返回403/空数据逆向JS还原加密逻辑Cookie时效登录后1小时Cookie失效定时刷新Cookie/保存登录态行为检测爬取过快触发验证码模拟真人延时/随机点击IP封禁单IP爬取超50条数据被封付费代理池/降低请求频率爬取携程旅游平台数据的核心,不是“简单的HTTP请求”,而是“理解平台的反爬逻辑并合规适配”——从sign参数破解到Cookie维护,再到行为模拟,每一步都是对HTTP协议、前端加密、用户行为的深度理解。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1713

汇川H5U PLC 实现直线插补、圆弧插补、直线圆弧混合连续插补

使用汇川H5UPLC实现直线插补,圆弧插补,直线圆弧混合路径插补,通过示教可以走出复杂的路径,仅供参考学习。

weixin_39832501的博客 4773

2021杭电多校第二场 1004 I love counting 字典树+树状数组

题意 给你一个序列ccc,多组询问在[l,r][l,r][l,r]区间内有多少个种类的ccc值,满足c⊕a≤bc\oplus a \le bc⊕a≤b (异或)。 分析 使用树状数组和字典树维护。 使用一个vectorvectorvector存储每一个右端点所对应的当前询问对应的l,a,bl,a,bl,a,b,使用visvisvis数组记录当前值是否出现过,使用树状数组维护前缀,答案就是cal(r)−cal(l−1)cal(r)-cal(l-1)cal(r)−cal(l−1)。在树状数组维护过程中,使用字典

weixin_45765224的博客 455

DeerFlow 系列教程 第四篇 | Sandbox 沙箱与 Sub-agent 子智能体协作详解

DeerFlow 系列教程第四篇介绍了两个关键子系统:Sandbox 沙箱系统和Sub-agent子智能体协作机制。沙箱系统通过虚拟路径映射、权限白名单、命令审计和容器隔离四重机制,为Agent提供安全的代码执行环境,使其能在隔离环境中执行文件操作和脚本运行。系统采用分层架构设计,包含应用层、工具层、审计层等,核心是定义标准交互接口的抽象基类。虚拟路径系统将Agent操作的虚拟路径映射到实际路径,确保安全性。这些功能使DeerFlow从对话助手进化为能处理复杂任务的Super Agent平台。

weixin_43674738的博客 284

2021 MINIEYE杯 杭电多校2 1004 I love counting 莫队 1010 I love permutation 数论

1004 I love counting 题意:给定一个长度为n的序列,序列元素c≤n。总共有Q个询问,每个询问都有一个区间(l,r)和两个参数a、b,求这个区间有多少种元素c满足 c⨁a≤b,其中⨁是二进制按位异或运算。 数据范围:n≤100000,1≤c≤n,Q≤100000,1≤l≤r≤n,a≤n+1,b≤n+1 方法1:莫队+字典树 对于每个询问,在区间调整过程中向字典树插入元素或从字典树中删除元素,维护一个v数组,确保区间每种元素只插入一次或删除一次,再维护一个cnt数组记录字典树每个节点扩展到该

qq_27873307的博客 214

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

2021杭电多校中超联赛第一二场莫队Trie树题汇总题解

蒟蒻的杭电多校痛苦清题历程记录

qq_57822942的博客 603

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

杭电多校 第二场D I love counting

上一场来了一个字典树,这一场又整了一个树状数组+字典树。 字典树yyds。 这道题我一开始想整一手可持久化字典树,但写到一半就发现可持久化不能处理重复的数。所以就开始罚坐了....... 赛后看题解写的是树状数组+字典树。 学习了一波。 AC代码如下: #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&-x const int MAXN = 1e5 + 5; int rt[MAXN]; int

weixin_50547586的博客 288

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

2019多校第二场:I Love Palindrome String (回文树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6599 解题心得: 其实看到这个回文串计数问题就该想到回文树,用回文树得到每一个相同种类回文串的数量,在hashhashhash或者manachmanachmanach判断一下是否前一半也是回文串就行了。 比赛的时候这么多人都会回文树也tql吧,都是些什么神仙啊,气馁。 #include &lt...

二营长的意大利炮友 294

2022杭电多校#2

思路用莫队处理每次询问,并将a[i]对应的纵坐标进行分块,用num数组记录每个a[i]的出现的个数,用sum表示每个块里面不为0的数的个数。对于每个j,求出小于他的所有值,最后加上异或后等于b的情况;...

qq_39380787的博客 211

2021杭电多校第二场

1001 I love cube 签到题。看清楚他问什么,边长为n-1的正方体(立方体),求满足条件的的等边三角形的个数,等边三角形的点只能在边界和内部,不能在外部。最后求出一个3次方求和的公式。 一些小知识,记得*的优先级高于%,打括号呀~~. #include<bits/stdc++.h> using namespace std; typedef long long ll; const int mod = 1e9 + 7; void solve() { ll n;

weixin_46554592的博客 336

2021杭电多校(MINIEYE) 第二场 补题

1005 I love string 题意 给n个字符,依次添加进字符串。每次可以添加到当前串的首或者尾。要求最终串的字典序最小。求使得最终串字典序最小的添加方案数。 n<=10^5 解题思路 先考虑字典序最小的字符,找出这些字符的第一次出现的位置,可以发现,这个第一次出现的位置之后的放置方式是唯一的。考虑剩下的部分,依旧是找字典序最小的字符。 最终结果就是相同连续前缀的长度的2的次幂。 代码 #include<bits/stdc++.h> using namespace std; con

m0_51537485的博客 431

2021年HDU多校第二场第4题-6964 I love counting

思路:先用莫队统计每个块内的数的种类和每个数的种类 再从高位到低位判断a,b,ca,b,ca,b,c之间的关系 首先sss表示到 jjj 这一位满足aaa ^ s=bs=bs=b 仅考虑第jjj位 1)bbb的jjj这一位为1,a1,a1,a的jjj这一位为111 那么只要c的j这一位为1,都能满足ccc ^ a<ba<ba<b 2)bbb为1,a1,a1,a为000, 那么只要ccc为000,都能满足ccc ^ a<ba<ba<b 3)bbb为000,a为111 ccc

weixin_46001550的博客 560

【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(7)签到题5题

Solved Pro.ID Title Ratio(Accepted / Submitted) 1001 Fall with Fake Problem 3.45%(3/87) 1002 Fall with Soldiers 28.57%(8/28) 1003 Fall with Trees 23.77%(618/2600) 结论,推公式 1004 Link with Balls 43.45%(179/412) 1005 Link with EQ 69.82%(303/434) 1006 Link with

小哈里的博客 1365

2021杭电多校第二场 赛后总结

2021杭电多校第二场 赛后总结 菜的一 本场过了4题,没进前200。 第一题1012 一分半水过去。 第二题1005 13分钟水过去。 第三题1001,一开始让队友去开,我去读别的题,队友推错了公式WA了一发,然后我画了画图发现枚举等边三角形边长,并且运用立方和公式推出答案之后A了。 然后就是无限罚坐时间,我看了1010,感觉是一道数学规律题或者结论题,找规律找了10多分钟无果,于是换题。 之后看1011,一直在想怎么解决 i&j>=k这个问题。由于前一场用到了字典树,于是这题我也往字典树

xiachi00的博客 363

2021杭电多校第二场补题

1008 I love exam 题目思路 先将每个学科分开,看作单个背包,算出每个背包各个容量下的最大价值,主要要保证分数不能超过100。 然后我们需要将各学科合并。令dp[i][t][z]表示前i门学课花费t时间挂科数目位z的最大价值总和,f[i][j]表示第i门学科花费j时间的最大价值。 因为存在挂不挂科的情况,所以我们合并时要判断f[i][j]是否大于等于60。 当大于60并且当前挂科的数目大于0时我们的递推式就是 dp[i][t][z]=max(dp[i−1][t−j][z−1]+f[i][j])

daydreamer23333的博客 311

2021杭电多校第二场 1005——I love string

题目大意 给你一个字符串,你遍历这个字符串,每次从这个字符串的第一个摘下一个字符插入到一个新字符串中,你使得新字符串的字典序最小,问你有多少种不同方法得到字典序最小的新字符串。 第一种插入方法是插入到新字符串的前面,第二种是插入到新字符串的后面。 解题思路 发现只有前面连续的相同字符才有两种插入方法,后面就只能有一种插入方法了,所以我们看前面有多少个相同连续的字符,那么答案就是 222 的这么多次幂。 Code #include <bits/stdc++.h> #define ll long l

yezi_coder的博客 204

2021“MINIEYE杯”中国大学生算法设计超级联赛(2)I love counting(Trie树)

#include<bits/stdc++.h> using namespace std; using ll=long long; using pii=pair<int,int>; using pli=pair<ll,int>; constexpr ll mod=1e9+7; //============================= int rd() { int res=0; char ch=getchar(); while(!isdigit(

Fighting_Peter的博客 555
上一篇: 2021牛客多校第二场 L——WeChat Walk
下一篇: 2021牛客多校第三场 B——Black and white
Linda_yezi_coder
博客等级 码龄7年 20粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值