题目描述

小杨同学想用卡牌玩一种叫做“接竹竿”的游戏。

游戏规则是:每张牌上有一个点数 vvv,将给定的牌依次放入一列牌的末端。若放入之前这列牌中已有与这张牌点数相
同的牌,则小杨同学会将这张牌和点数相同的牌之间的所有牌全部取出队列(包括这两张牌本身)。

小杨同学现在有一个长度为 nnn 的卡牌序列 AAA,其中每张牌的点数为 AiA_iAi1≤i≤n1\le i\le n1in)。小杨同学有 qqq 次询问。第 iii 次(1≤i≤q1\le i\le q1iq)询问时,小杨同学会给出 li,ril_i,r_ili,ri 小杨同学想知道如果用下标在 [li,ri][l_i,r_i][li,ri] 的所有卡牌按照下标顺序玩“接竹竿”的游戏,最后队列中剩余的牌数。

输入格式

一行包含一个正整数 TTT,表示测试数据组数。

对于每组测试数据,第一行包含一个正整数 nnn,表示卡牌序列 AAA 的长度。

第二行包含 nnn 个正整数 A1,A2,…,AnA_1,A_2,\dots,A_nA1,A2,,An,表示卡牌的点数 AAA

第三行包含一个正整数 qqq,表示询问次数。

接下来 qqq 行,每行两个正整数 li,ril_i,r_ili,ri 表示一组询问。

输出格式

对于每组数据,输出 qqq 行。第 iii 行(1≤i≤q1\le i\le q1iq)输出一个非负整数,表示第 iii 次询问的答案。

输入输出样例 #1

输入 #1

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

输出 #1

1
1
0
2

说明/提示

样例解释

对于第一次询问,小杨同学会按照 1,2,21,2,21,2,2 的顺序放置卡牌,在放置最后一张卡牌时,两张点数为 222 的卡牌会被收走,因此最后队列中只剩余一张点数为 111 的卡牌。

对于第二次询问,队列变化情况为:

{}→{1}→{1,2}→{1,2,2}→{1}→{1,3}→{1,3,1}→{}→{3}\{\}\to\{1\}\to\{1,2\}\to\{1,2,2\}\to\{1\}\to\{1,3\}\to\{1,3,1\}\to\{\}\to\{3\}{}{1}{1,2}{1,2,2}{1}{1,3}{1,3,1}{}{3}。因此最后队列中只剩余一张点数为 333 的卡牌。

数据范围

子任务分数TTTnnnqqqmax⁡Ai\max A_imaxAi特殊条件
111303030≤5\le 55≤100\le100100≤100\le100100≤13\le1313
222303030≤5\le 55≤1.5×104\le 1.5\times10^41.5×104≤1.5×104\le 1.5\times10^41.5×104≤13\le1313所有询问的右端点等于 nnn
333404040≤5\le 55≤1.5×104\le 1.5\times10^41.5×104≤1.5×104\le 1.5\times10^41.5×104≤13\le1313

对于全部数据,保证有 1≤T≤51\le T\le 51T51≤n≤1.5×1041\le n\le 1.5\times 10^41n1.5×1041≤q≤1.5×1041\le q\le 1.5\times 10^41q1.5×1041≤Ai≤131\le A_i\le 131Ai13

solution

可以记录一个每个纸牌的下一个相同纸牌的位置,这表示可以删除的一段,所以如果可以将从每一个纸牌开始可以删除的位置都记录下来,这样就好办了。但是有可能数据量太大,可以采用st表的方式,只记录 2i2^i2i 级别的。

代码

#include <iostream>
#include "bit"
#include "vector"
#include "unordered_set"
#include "unordered_map"
#include "set"
#include "queue"
#include "algorithm"
#include "bitset"
#include "cstring"
#include "cmath"using namespace std;const int N = 15001;int t, n, m, a[14], f[N][20]; // a[i] : 牌 i 上一次出现的位置
// vector<int> f[N]; // f[i][j] : 第 i 张牌的可以通过 2^j 次收牌达到的位置int main() {cin >> t;while (t--) {cin >> n;for (int i = 1; i <= n; i++)for (int j = 0; j < 20; j++)f[i][j] = n + 1;for (int i = 1; i <= n; i++) {int x;cin >> x;if (a[x]) f[a[x]][0] = i;a[x] = i;}for (int j = 1; j < 20; j++)for (int i = 1; i <= n; i++) {if (f[i][j - 1] < n)f[i][j] = f[f[i][j - 1] + 1][j - 1];}cin >> m;while (m--) {int l, r, s = 0, flag = 0;cin >> l >> r;while (l <= r) {int x = l;for (int j = 19; j >= 0; j--) {if (f[x][j] < r)x = f[x][j] + 1;else if (f[x][j] == r) {flag = 1;break;}}if (flag) break;if (x > l) l = x;else {s++, l++;}}cout << s << endl;}// 清空 amemset(a, 0, sizeof a);}
}

结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows docker-02-docker 最常用的命令汇总

一、镜像管理命令说明常用参数示例docker pull <镜像名>:<标签>拉取镜像docker pull nginx:latestdocker images查看本地镜像docker images -a&#xff08;含中间层镜像&#xff09;docker rmi <镜像ID>删除镜像docker rmi -f $(docker images -q)&#xff0…

前端react项目目录详解

1. 项目根目录文件​​文件/目录作用​​package.json​​定义项目依赖、脚本命令&#xff08;如 start/build&#xff09;、版本信息等​​.env​​基础环境变量配置&#xff08;所有环境共享&#xff09;​​.env.development​​开发环境专用变量&#xff08;如本地API地址&…

前端-CSS (样式引入、选择器)

文章目录大纲前端三大件常用样式颜色px:像素1.CSS三种引入方式1.1 行内样式1.2 页内样式1.3 引入外部样式表文件&#xff08;常见&#xff09;基础选择器1. 标记选择器2. id选择器3. 类选择器 最常用4 * 选择器 使用频率较低复合选择器伪类选择器1.超链接伪类&#xff1a;2.子元…

7月19日 台风“韦帕“强势逼近:一场与时间赛跑的防御战

中央气象台7月19日10时继续发布台风黄色预警,今年第6号台风"韦帕"正以每小时20-25公里的速度向西偏北方向移动,强度逐渐加强。这个来自海洋的"不速之客"中心附近最大风力已达10级(25米/秒),预计将于20日下午至夜间在广东深圳到海南文昌一带沿海登陆,…

学习 Python 爬虫需要哪些基础知识?

学习 Python 爬虫需要掌握一些基础技术和概念。 1. Python 基础语法 这是最根本的前提&#xff0c;需要熟悉&#xff1a; - 变量、数据类型&#xff08;字符串、列表、字典等&#xff09; - 条件判断、循环语句 - 函数、类与对象 - 模块和包的使用&#xff08;如 import 语…

IELTS 阅读C15-Test 2-Passage 2

继续雅思上分实验。这次正确率是10/13&#xff0c;还是挺让我吃惊的&#xff0c;因为我又没有完全读懂&#xff01; 题型1-填空题这道题目很简单&#xff0c;同样地去原文段落里找就好&#xff0c;最后一个空填错了是因为我不知道mitigate就是decrease同义词。 题型2-人物匹配题…

7.18 Java基础 |

以下内容&#xff0c;参考Java 教程 | 菜鸟教程&#xff0c;下边是我边看边记的内容&#xff0c;以便后续复习使用。 多态&#xff1a; 继承&#xff0c;接口就是多态的具体体现方式。生物学上&#xff0c;生物体或物质可以具有许多不同的形式或者阶段。 多态分为运行时多态&…

网络安全知识学习总结 Section 11

一、实验知识总结&#xff08;模拟&#xff09;等价路由配置实验并抓包分析按流分析实验拓扑图&#xff1a;AR1配置&#xff1a;<Huawei>sys [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 192.168.1.1 30 [Huawei-GigabitEthernet0/0/0]int g0/0/1 [Huaw…

VBA 运用LISTBOX插件,选择多个选项,并将选中的选项回车录入当前选中的单元格

维护好数据&#xff0c;并新增一个activeX列表框插件Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Count > 1 Then Exit SubIf Target.Row > 2 And Target.Row < 10 And Target.Column 2 Then 选择操作范围With ListBox1.MultiSelect 1 …

ASP .NET Core 8实现实时Web功能

ASP.NET Core SignalR 是一个开放源代码库&#xff0c;可用于简化向应用添加实时 Web 功能。 实时 Web 功能使服务器端代码能够将内容推送到客户端。以下是 ASP.NET Core SignalR 的一些主要功能&#xff1a;自动处理连接管理同时向所有连接的客户端发送消息。 例如聊天室向特定…

最新版谷歌浏览器 内网安装 pdf无法预览

最新版谷歌浏览器 内网安装 pdf无法预览 谷歌下载地址 谷歌下载地址 不同的浏览器版本&#xff0c;兼容的js标准不一样 js标准也在不断升级&#xff0c;增加新的方法。

NX二次开发常用函数坐标转化UF_MTX4_csys_to_csys和UF_MTX4_vec3_multipl

一、UF_MTX4_csys_to_csys 1.1 函数名称 UF_MTX4_csys_to_csys1.2 函数中各参数解释&#xff1a;函数参数解释&#xff1a; 第1个参数为输入&#xff1a; 输入const double 双精度类型的参数&#xff0c;参数的变量格式为from_origin [ 3 ]&#xff0c;坐标系&#xff…

JAVA中的Collections 类

文章目录前言一、 排序方法 sort() 和 reverseOrder()1. sort(List<T> list)2.sort(List<T> list, Comparator<? super T> c)二、查找方法 max(), min()1.max(Collection<? extends T> coll)2.min(Collection<? extends T> coll)3.max(Collec…

统计学习方法

一、统计学习方法步骤 得到一个有限的训练数据集合确定学习模型的集合-假设空间确定模型选择的准则-策略实现求解最优模型的算法-算法通过学习方法选择最优模型利用学习的最优模型对新数据进行预测或分析 二、统计学习方法分类 三、统计学习的基本分类&#xff08;监督学习&a…

windows docker-01-desktop install windows10 + wls2 启用

windows10 安装 docker 版本信息确认 需要区分 windows 是 amd64 还是 arm64 powershell 中执行&#xff1a; > echo $env:PROCESSOR_ARCHITECTURE AMD64下载 官方 https://www.docker.com/products/docker-desktop/ 下载 windows amd64 下载好了直接安装。 如何验证…

Elasticsearch集群出现脑裂(Split-Brain)如何排查原因和处理?

Elasticsearch集群出现脑裂(Split-Brain)如何排查原因和处理? 1. 脑裂(Split-Brain)背景 定义:脑裂是指 Elasticsearch 集群由于网络分区(network partition)或其他原因分裂成多个独立的子集群,每个子集群认为自己是主集群,导致不同的子集群可能独立处理请求,造成数…

Apache Ignite 的 Pages Writes Throttling(页面写入节流)

&#x1f31f; 一、什么是 Checkpointing&#xff08;检查点机制&#xff09;&#xff1f; 在 Apache Ignite 中&#xff1a; 数据是先保存在内存中&#xff08;RAM&#xff09;&#xff0c;然后异步写入磁盘。当数据被修改时&#xff0c;它首先被更新在内存中的“页”上&#…

uni-app 学习笔记:使用深度选择器修改第三方库组件的样式

在uni-app中&#xff0c;深度选择器&#xff08;Deep Selector&#xff09;是一个非常重要的概念&#xff0c;它允许父组件穿透样式隔离&#xff0c;从而修改子组件的内部样式。1.什么是uni-app深度选择器深度选择器是一种CSS选择器&#xff0c;用于穿透组件的样式隔离机制&…

物联网IOT平台到底是啥

物联网IOT平台&#xff1a;万物互联的智慧中枢清晨&#xff0c;智能闹钟轻柔唤醒你&#xff0c;咖啡机自动开始冲泡&#xff1b;离家时&#xff0c;空调自动关闭&#xff0c;安防摄像头启动&#xff1b;办公室内&#xff0c;生产线传感器实时回传设备状态&#xff0c;仓库管理系…

MySQL详解二

MySQL详解二索引主键索引唯一索引普通索引组合索引全文索引主键选择约束索引实现B树聚集索引辅助索引索引存储innodb 体系结构最左匹配原则覆盖索引索引下推索引失效索引原则索引 数据库中的数据是以记录为单位的&#xff0c;如果一条一条进行查找&#xff0c;几十万数据就已经…