news 2026/6/10 21:55:07

第八届传智杯 初赛 bxg25-4 锁 题解 暴力模拟 + 直接维护区间计数 桶思想 简单直观易懂

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第八届传智杯 初赛 bxg25-4 锁 题解 暴力模拟 + 直接维护区间计数 桶思想 简单直观易懂

描述

已知牛牛有 nn 份资源,编号为 11 到 nn,初始均处于未上锁状态。现在共有 mm 次操作,每次给定一个编号 pp:
∙ ∙若编号为 pp 的资源未上锁,则为其上锁;
∙ ∙否则,解除锁,使其回到未上锁状态。
每次操作后,牛牛希望分别统计区间 [1,x][1,x] 与 [y,n][y,n] 中“可访问”资源的数量。这里规定,资源可访问当且仅当其处于未上锁状态。

输入描述:

每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≦T≦103)T(1≦T≦103) 代表数据组数,每组测试数据描述如下:
第一行输入四个整数,依次为:
∙ ∙n(1≦n≦2×105)n(1≦n≦2×105),表示资源数量;
∙ ∙m(1≦m≦4×105)m(1≦m≦4×105),表示操作次数;
∙ ∙x(1≦x≦n)x(1≦x≦n),表示区间 [1,x][1,x] 的右端点;
∙ ∙y(1≦y≦n)y(1≦y≦n),表示区间 [y,n][y,n] 的左端点。
此后 mm 行,第 ii 行输入一个整数 pi(1≦pi≦n)pi​(1≦pi​≦n),表示对编号为 pipi​ 的资源切换锁状态。

输出描述:

对于每次操作,新起一行输出两个整数,分别表示区间 [1,x][1,x] 与 [y,n][y,n] 中可访问资源的数量。

示例1

输入:

2 4 3 2 3 2 3 3 6 6 4 2 1 3 6 4 4 2

复制输出:

1 2 1 1 1 2 3 5 2 4 2 3 1 2 2 3 1 2

说明

对于第一组测试数据,用 yy 表示资源上锁,nn 表示资源未上锁,过程如下: ∙ ∙第一次操作后,资源上锁情况为:n,y,n,nn,y,n,n,可以发现,区间 [1,2][1,2] 中只有编号 11 可访问,而区间 [3,4][3,4] 均未上锁,所以输出 11 和 22; ∙ ∙第二次操作后,资源上锁情况为:n,y,y,nn,y,y,n,可以发现,区间 [1,2][1,2] 情况不变,区间 [3,4][3,4] 中只剩下编号 44 可访问,所以输出 11 和 11; ∙ ∙第三次操作,将资源 33 解锁,重新回到了第一次操作后的状态,因此,输出与第一次操作后的输出相同,输出 11 和 22。

思路:

主播看到题没想那么多,看到数据范围,直接无脑想用桶或者布尔计数来标记每个锁的状态,这样无脑的做法来做,过了,不过数据再大的就肯定过不了的,正解应该是树状数组 / 线段树 + 前缀和思想来高效维护区间统计。简单来说,就是用bool数组记录每个数的标记状态,每次切换状态后,只更新该数所在区间的计数,最后实时输出结果,核心是 “按需更新、即时输出” 的模拟思想。

主播的代码:

#include <iostream> #include<queue> #include<cstring> #include<algorithm> #include<cstdio> #include<map> #include<vector> #include<set> #include<stack> #include<string> #include<math.h> #include <iomanip> #include<unordered_map> #include <unordered_set> #include<array> #define gets(S) fgets(S,sizeof(S),stdin) #define ll long long const ll N = 5e5 + 5; const ll Max = 0x3f3f3f3f; using namespace std; ll t; bool saki[N]; int main() { cin >> t; ll n, m, x, y; while (t--) { cin >> n >> m >> x >> y; ll w, ansx = x, ansy = n - y + 1; for (int i = 1; i <= m; i++) { cin >> w; if (!saki[w]) { saki[w] = 1; } else { saki[w] = 0; } if (w >= y) { if (saki[w]) { ansy -= 1; } else { ansy += 1; } } if (w <= x) { if (saki[w]) { ansx -= 1; } else { ansx += 1; } } cout << ansx << ' ' << ansy << endl; } for (int i = 1; i <= m; i++) { saki[i] = 0; } } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 3:58:30

Headless Chrome Crawler测试实战:从零构建可靠爬虫系统

Headless Chrome Crawler测试实战&#xff1a;从零构建可靠爬虫系统 【免费下载链接】headless-chrome-crawler Distributed crawler powered by Headless Chrome 项目地址: https://gitcode.com/gh_mirrors/he/headless-chrome-crawler Headless Chrome Crawler作为基于…

作者头像 李华
网站建设 2026/6/10 3:10:08

解决 PyTorch 中 torch.meshgrid 的警告问题

解决 PyTorch 中 torch.meshgrid 的警告问题 问题描述 在使用 PyTorch 2.9.1+cu130 版本时,可能会遇到以下警告: C:\Users\hp\.conda\envs\pytorch\Lib\site-packages\torch\functional.py:505: UserWarning: torch.meshgrid: in an upcoming release, it will be required…

作者头像 李华
网站建设 2026/6/10 11:17:33

彻底解决k6 Docker镜像HTTPS证书验证失败的完整方案

彻底解决k6 Docker镜像HTTPS证书验证失败的完整方案 【免费下载链接】k6 A modern load testing tool, using Go and JavaScript - https://k6.io 项目地址: https://gitcode.com/GitHub_Trending/k6/k6 当使用k6 Docker镜像进行内部系统API压测时&#xff0c;HTTPS证书…

作者头像 李华
网站建设 2026/6/10 11:17:21

3分钟掌握中文语义向量模型:text2vec-base-chinese实战指南

想要快速构建智能搜索系统或实现精准的文本匹配功能吗&#xff1f;text2vec-base-chinese中文语义向量模型正是你需要的利器&#xff01;这个预训练模型能够将中文句子转换为768维的语义向量&#xff0c;让计算机真正理解文本的深层含义。 【免费下载链接】text2vec-base-chine…

作者头像 李华
网站建设 2026/6/9 12:09:00

MouseTester完整使用手册:专业鼠标性能测试从零开始

MouseTester完整使用手册&#xff1a;专业鼠标性能测试从零开始 【免费下载链接】MouseTester 项目地址: https://gitcode.com/gh_mirrors/mo/MouseTester 还在为游戏中的精准操作而苦恼&#xff1f;或是在设计工作中遭遇光标漂移的困扰&#xff1f;MouseTester让鼠标性…

作者头像 李华
网站建设 2026/6/10 11:10:35

Chrome扩展热重载工具:告别手动刷新的开发新体验

Chrome扩展热重载工具&#xff1a;告别手动刷新的开发新体验 【免费下载链接】crx-hotreload Chrome Extension Hot Reloader 项目地址: https://gitcode.com/gh_mirrors/cr/crx-hotreload 作为一名Chrome扩展开发者&#xff0c;你是否曾经因为每次代码修改都要手动刷新…

作者头像 李华