Codeforces Round 974 (Div. 3) H题 Robin Hood Archery(基础莫队,随机异或哈希)

news2024/10/10 15:18:38

题目链接

Codeforces Round 974 (Div. 3) H题 Robin Hood Archery

思路1

因为警长是后手,按照最优的策略,只有每一种数的个数是偶数个的时候,警长会平局,否则警长会输。

随着询问区间端点的变化,答案的转移是 O ( 1 ) O(1) O(1)的。因此,我们可以使用基础莫队进行离线求解。

代码1

#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define debug() cout<<"-------------------"<<endl;
typedef long long i64;
typedef pair<int, int> pii;
const int N = 2e5 + 5, M = 1e6 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f3f3f3f3f;
int n, m;
int a[N], ans[N];
int cnt[M];//桶
struct MOA
{
	struct query
	{
		int id, l, r;
	};

	int len;
	vector<query>q;

	MOA() {}
	MOA(int n, int m) {init(n, m);}

	void init(int n, int m)
	{
		len = sqrt(n);
		q.resize(m + 1);
	}

	void addquery(int i, int l, int r)
	{
		q[i] = {i, l, r};
	}

	int get(int x)
	{	//求每个编号对应块
		return x / len;
	}

	void add(int x, int &res)
	{
		if (cnt[x] % 2 == 0)
			res++;
		else res--;
		cnt[x]++;
	}

	void del(int x, int &res)
	{
		if (cnt[x] & 1)
			res--;
		else res++;
		cnt[x]--;
	}

};
void solve()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		cnt[a[i]] = 0;
	}
	MOA moa(n, m);
	for (int i = 1; i <= m; i++)
	{
		int l, r;
		cin >> l >> r;
		moa.addquery(i, l, r);
	}

	sort(moa.q.begin() + 1, moa.q.begin() + 1 + m, [&moa](MOA::query a, MOA::query b) {
		int i = moa.get(a.l);
		int j = moa.get(b.l);
		if (i != j) return i < j;
		return a.r < b.r;
	});

	int i = 0;//向r靠齐的指针
	int j = 1;//向l靠齐的指针
	int res = 0;

	for (int k = 1; k <= m; k++)
	{
		int id = moa.q[k].id;
		int l = moa.q[k].l;
		int r = moa.q[k].r;

		while (i < r)
		{
			moa.add(a[++i], res);
		}
		while (i > r)
		{
			moa.del(a[i--], res);
		}
		while (j < l)
		{
			moa.del(a[j++], res);
		}
		while (j > l)
		{
			moa.add(a[--j], res);
		}
		ans[id] = res;
	}
	for (int i = 1; i <= m; i++)
	{
		if (ans[i])
		{
			cout << "NO" << endl;
		}
		else cout << "YES" << endl;
	}
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	int test = 1;
	cin >> test;
	for (int i = 1; i <= test; i++)
	{
		solve();
	}
	return 0;
}

思路2

对于 [ a l , a r ] [a_{l},a_{r}] [al,ar]是否可以两两抵消,我们可以通过区间异或值是否为 0 0 0进行判断。

但这样随便一个hack都可以死(比如1,2,4,7)。

但我们可以进行随机赋值,把 [ 1 , 1 e 6 ] [1,1e6] [1,1e6]随机映射到一个极大的范围,之后使用异或哈希即可。

代码2

#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define debug() cout<<"-------------------"<<endl;
typedef long long i64;
typedef unsigned long long u64;
typedef pair<int, int> pii;
const int N = 2e5 + 5, M = 1e6 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f3f3f3f3f;
std::mt19937 rnd(time(0));
int n, m;
int a[N];
u64 s[N], v[M];
void solve()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		s[i] = s[i - 1] ^ v[a[i]];
	}

	while (m--)
	{
		int l, r;
		cin >> l >> r;
		if ((r - l + 1) & 1)
		{
			cout << "NO" << endl;
		}
		else
		{
			if ((s[r] ^ s[l - 1]) == 0)
			{
				cout << "YES" << endl;
			}
			else cout << "NO" << endl;
		}
	}
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	for (int i = 1; i <= 1e6; i++)
	{
		v[i] = rnd();
	}
	int test = 1;
	cin >> test;
	for (int i = 1; i <= test; i++)
	{
		solve();
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Large AI Model Empowered Multimodal Semantic Communications——基于大模型的多模态语义通信框架

1. 背景 本文讨论了大规模AI模型在多模态语义通信&#xff08;SC&#xff09;系统中的应用&#xff0c;处理不同类型的数据&#xff08;文本、音频、图像、视频&#xff09;以实现低延迟、高质量的语义层次通信。提出了一个基于大模型的多模态SC&#xff08;LAM-MSC&#xff09…

心理学基础

一&#xff0c;三观 三观包括世界观、人生观、价值观。 1&#xff0c;世界观 世界观‌是人们对整个世界的总的看法和根本观点。可以划分为两种根本对立的世界观类型&#xff0c;即唯心主义世界观和唯物主义世界观。 2&#xff0c;人生观 人生观是人们在实践中形成的对于人…

[C高手编程] C语言数据结构:排序算法与查找算法

&#x1f496;&#x1f496;⚡️⚡️专栏&#xff1a;C高手编程-面试宝典/技术手册/高手进阶⚡️⚡️&#x1f496;&#x1f496; 「C高手编程」专栏融合了作者十多年的C语言开发经验&#xff0c;汇集了从基础到进阶的关键知识点&#xff0c;是不可多得的知识宝典。如果你是即将…

开发一个exe应用工具,pdf转图片工具,pdf截成单个图片,然后全量修整没用的白边

pdf转图片工具 图片裁剪白边工具 window系统exe应用工具下载地址https://download.csdn.net/download/websmallrabbit/89864476如果有帮助到您还请动动手帮忙点赞&#xff0c;关注&#xff0c;评论转发&#xff0c;感谢啦&#xff01;&#x1f495;&#x1f495;&#x1f495;&…

记一次详细的实战渗透

声明&#xff1a;本文仅限于技术讨论与分享&#xff0c;严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负&#xff0c;与本号及原作者无关。 前言 一次授权的渗透测试&#xff0c;过程比较详细&#xff0c;充满了巧合&#xff0c;也算比较有意思直接记录一下&a…

SpringBoot访问web中的静态资源

SpringBoot访问web中的静态资源&#xff0c;有两个方式&#xff1a; 1、SpringBoot默认指定了一些固定的目录结构&#xff0c;静态资源放到这些目录中的某一个&#xff0c;系统运行后浏览器就可以访问到 ① 关键是SpringBoot默认指定的可以存放静态资源的目录有哪些&#xff…

这几个被淘汰的Python库,请不要再用!

随着每个 Python 版本的发布&#xff0c;都会添加新模块&#xff0c;并引入新的更好的做事方式&#xff0c;虽然我们都习惯了使用好的旧 Python 库和某些做事方式&#xff0c;但现在也时候升级并利用新的和改进的模块及其特性了。 这里插播一条粉丝福利&#xff0c;如果你正在…

图片美化SDK解决方案,赋能H5与小程序极致体验

无论是社交媒体分享、电商产品展示&#xff0c;还是个人日常生活的记录&#xff0c;一张经过精心美化的图片总能瞬间吸引眼球&#xff0c;传递出更加丰富和动人的信息。如何在不增加应用体积、不牺牲用户体验的前提下&#xff0c;为H5页面和小程序提供媲美原生APP的图片美化功能…

二、IOC容器

文章目录 1. IOC的底层原理1.1 什么是IOC1.2 IOC 底层原理1.3 画图讲解 IOC 底层原理 2. IOC接口&#xff08;BeanFactory&#xff09;3. IOC 操作 Bean 管理&#xff08;概念&#xff09;3.1 什么是Bean管理3.2 Bean管理操作的两种方式 4. IOC操作 Bean 管理&#xff08;基于 …

go发送邮件:在Go语言中实现发邮件的教程?

go发送邮件的教程指南&#xff1f;怎么使用Go语言发送电子邮件&#xff1f; Go语言&#xff0c;作为一种简洁、高效且并发性强的编程语言&#xff0c;自然也提供了丰富的库来支持邮件发送功能。AokSend将详细介绍如何在Go语言中实现发送邮件的功能&#xff0c;帮助你快速掌握这…

Video Ocean,又一AI视频生成神器!

Video Ocean&#xff0c;又一AI视频生成神器&#xff01; 引言 大家好&#xff0c;今天想和大家聊聊一个特别的工具——Video Ocean。在如今这个短视频盛行的时代&#xff0c;大家都知道&#xff0c;制作一个吸引眼球的视频可不是一件简单的事情。传统的视频编辑软件复杂又费…

Gin解说

Gin是一个用Go语言编写的高性能、开源的Web框架&#xff0c;它被设计为简单、快速和灵活。Gin非常适合用于构建RESTful API和微服务。以下是Gin框架的一些核心特点&#xff1a; 特点 1.高性能&#xff1a;Gin使用了高速的HTTP路由器&#xff0c;它基于Radix树实现&#xff0c…

AI直播元年:盘点2025年经典实用的十款AI直播工具,特别是第一款!

AI直播元年&#xff1a;盘点2025年经典实用的十款AI直播工具&#xff0c;特别是第一款&#xff01; 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;直播行业正经历着前所未有的变革。2025年&#xff0c;被誉为“AI直播元年”&#xff0c;这一年见证了众多…

2.4 Service服务层

今天&#xff0c;我将向大家介绍在Spring Boot应用程序中实现Service层的方法&#xff0c;并通过实战演示如何测试Service层。 首先&#xff0c;让我们回顾一下Service层在MVC架构中的作用。Service层位于Model和Controller之间&#xff0c;主要负责处理业务逻辑。它封装了应用…

多线程—— Thread 类及常见用法(详解)

前言 本篇文章会介绍 Java 中的 Thread 类常见的构造方法、常见属性及其常见的用法&#xff0c;会列举一些代码例子来更直观的感受每个方法是作用&#xff0c;文章还会介绍 Java 中线程的状态及他们之间的转换关系&#xff0c;那么下面就开始今天的分享吧~~ 一、常见构造方法 …

ant-design-vue 可输入表格的校验方法

1、思路&#xff0c;首先用a-form包裹a-table&#xff0c;( 主要是name的取值问题&#xff0c;要严格按照[数据源,index,校验的字段]来) <a-form ref"form" :model"formData" :rules"rules"><a-table :dataSource"formData.table…

charAt,chartCodeAt,codePointAt,fromCodePoint,fromCharCode

生僻字的length算2,有些空格是特殊空格,比如\u3000 u3000不是全角空格&#xff0c;u3000是表意字空格&#xff08;Ideographic Space&#xff09;&#xff0c;宽度和一个表意字&#xff08;汉字&#xff09;相同。它应当被当做汉字来处理。比如&#xff0c;在一些排版中&#x…

Vxe UI vue vxe-table select 下拉框选项列表数据量超大过大时卡顿解决方法

Vxe UI vue vxe-table vxe-grid select 下拉框选项列表数据量超大过大时卡顿解决方法 查看 github vxe-table 官网 vxe-table 本身支持虚拟滚动&#xff0c;数据量大也是支持的&#xff0c;但是如果在可编辑表格中使用下拉框&#xff0c;下拉框的数据量超大时&#xff0c;可能…

【源码+文档+调试讲解】宜家宜业物业管理系统node.js框架

摘 要 近年来&#xff0c;科技飞速发展&#xff0c;在经济全球化的背景之下&#xff0c;互联网技术将进一步提高社会综合发展的效率和速度&#xff0c;互联网技术也会涉及到各个领域&#xff0c;而宜家宜业物业管理系统在网络背景下有着无法忽视的作用。信息管理系统的开发是…

Chromium 如何构建一个单独exe c++

1、在src目录下新建一个jdtest文件夹 src\jdtest 2、在jdtest文件下添加BUILD.gn jdtest.cc build.gn 内容如下&#xff1a; # Copyright 2014 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file…