洛谷 P10264 [GESP202403 八級] 接竹竿 普及+/提高

題目描述

小楊同學想用卡牌玩一種叫做“接竹竿”的游戲。

游戲規則是:每張牌上有一個點數 vvv,將給定的牌依次放入一列牌的末端。若放入之前這列牌中已有與這張牌點數相
同的牌,則小楊同學會將這張牌和點數相同的牌之間的所有牌全部取出隊列(包括這兩張牌本身)。

小楊同學現在有一個長度為 nnn 的卡牌序列 AAA,其中每張牌的點數為 AiA_iAi?1≤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 131Ai?13

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;幾十萬數據就已經…