HDU - 5919 Sequence II

題意:

  給定長度為n的序列和q次詢問。每次詢問給出一個區間(L,R),求出區間內每個數第一次出現位置的中位數,強制在線。

題解:

  用主席樹從右向左的插入點。對于當前點i,如果a[i]出現過,則把原位置-1,i處+1。這樣保證了每個點只出現1次。

  對于詢問區間(L,R),求出L節點[L,R]的值即為區間內有多少不同的數。最后就是主席樹求k_th的操作。倒著插省去了二分的復雜度。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 2e5+10;
int t, n, q, tot;
int l, r;
int a[N];
int root[N], vis[N];
int ans[N];
struct node {int l, r, sum;
}tre[N*40];
void update(int l, int r, int &x, int y, int pos, int val) {tre[++tot] = tre[y];tre[tot].sum += val;x = tot;if(l==r) return ;int mid = l+r>>1;if(pos<=mid) update(l, mid, tre[x].l, tre[y].l, pos, val);else update(mid+1, r, tre[x].r, tre[y].r, pos, val);
}
int query(int l, int r, int x, int ql, int qr) {if(ql<=l&&r<=qr) return tre[x].sum;int mid = l+r>>1;int res = 0;if(ql<=mid) res += query(l, mid, tre[x].l, ql, qr);if(qr>mid) res += query(mid+1, r, tre[x].r, ql, qr);return res;
}
int find_kth(int l, int r, int x, int k) {if(l==r) return l;int mid = l+r>>1;int t = tre[tre[x].l].sum;if(t>=k) return find_kth(l, mid, tre[x].l, k);return find_kth(mid+1, r, tre[x].r, k-t);
}
int main() {scanf("%d", &t);for(int casee = 1; casee <= t; casee++) {memset(vis, 0, sizeof(vis));tot = 0;scanf("%d%d", &n, &q);root[n+1] = 0;for(int i = 1; i <= n; i++) scanf("%d", &a[i]);for(int i = n; i >= 1; i--) {update(1, n, root[i], root[i+1], i, 1);if(vis[a[i]]) update(1, n, root[i], root[i], vis[a[i]], -1);vis[a[i]] = i;}ans[0] = 0;printf("Case #%d: ", casee);for(int i = 1; i <= q; i++) {scanf("%d%d", &l, &r);int tt = l;l = min((l+ans[i-1])%n+1, (r+ans[i-1])%n+1);r = max((tt+ans[i-1])%n+1, (r+ans[i-1])%n+1);int k = query(1, n, root[l], l, r);ans[i] = find_kth(1, n, root[l], (k+1)/2);printf("%d", ans[i]);if(i!=q) printf(" ");}puts("");}
}
View Code

?

轉載于:https://www.cnblogs.com/Pneuis/p/9096643.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452527.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452527.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Django博客--3.創作后臺開啟

文章目錄0.創建admin后臺管理員賬號1.在 admin 后臺注冊模型2.漢化應用的標題3.漢化應用下各個模塊的名稱4.漢化應用下各個模塊的屬性的名稱5.文章列表顯示更加詳細的信息6.簡化新增文章的表單7.自動設置文章作者為當前用戶8.設定創建時間為當前時間9.設定修改建時間為保存時的…

逐步求精

逐步求精定義為為了能集中精力解決主要問題而盡量推遲對問題細節的考慮。 逐步求精最初是由NiklausWirth提出的一種自頂向下的設計策略。按照這種設計策略&#xff0c;程序的體系結構是通過逐步精化處理過程的層次而設計出來的。通過逐步分解對功能的宏觀陳述而開發出層次結構…

raid-6磁盤陣列損壞導致數據丟失的恢復過程(圖文教程)

一、故障描述機房突然斷電導致整個存儲癱瘓&#xff0c;加電后存儲依然無法使用。經過用戶方工程師診斷后認為是斷電導致存儲陣列損壞。整個存儲是由12塊日立硬盤&#xff08;3T SAS硬盤&#xff09;組成的RAID-6磁盤陣列&#xff0c;被分成一個卷&#xff0c;分配給幾臺Vmware…

編寫登錄注冊

const readline require(readline-sync);let error 3;let user [{username: 001,password: 123}, {username: 002,password: 456}, {uesrname: 003,password: 789}]//登錄let denglu function () {while (true) {console.log(請輸入您的登錄賬號&#xff1a;);let username…

android將字符串轉化為json,將字符串轉換為JSON數組

將字符串轉換為JSON數組我從Web服務獲得以下字符串的JSON&#xff0c;并嘗試將其轉換為 JSONarray{"locations": [{"lat": "23.053","long": "72.629","location": "ABC","address": "D…

談新技術學習方法-如何學習一門新技術新編程語言

學習一門編程語言或者編程技術的方式基本上是這樣一個流程&#xff1a; 1&#xff0c;對學習這門語言或者技術的必要性進行評估。比如你是工作需要&#xff0c;或者興趣所至&#xff0c;甚至是為了把妹。這個必要性關系到你要學多深入&#xff0c;需要學習多長時間。 比如我想…

信息隱藏和局部化

信息隱藏原理&#xff1a;應該這樣設計和確定模塊&#xff0c;使得一個模塊內包含的信息(過程和數據)對于不需要這些信息的模塊來說&#xff0c;是不能訪問的。 局部化是指把一些關系密切的軟件元素物理地放得彼此靠近。 如果在測試期間和以后的軟件維護期間需要修改軟件&#…

圖像識別自動化android,Android自動化測試

寫在開頭&#xff1a;Android UI 自動化測試推薦網易的Airtest&#xff0c;也是谷歌推薦的&#xff0c;操作簡單&#xff0c;而且基于圖像識別根據用戶操作界面自動生成Python測試代碼JUnit單元測試testImplementation junit:junit:4.12image.pngimage.png使用gradle命令進行單…

如何重構“箭頭型”代碼

本文主要起因是&#xff0c;一次在微博上和朋友關于嵌套好幾層的if-else語句的代碼重構的討論&#xff08;微博原文&#xff09;&#xff0c;在微博上大家有各式各樣的問題和想法。按道理來說這些都是編程的基本功&#xff0c;似乎不太值得寫一篇文章&#xff0c;不過我覺得很多…

Django博客--4.開發博客文章詳情頁

文章目錄0.思路引導1.設計文章詳情頁的 URL2.獲取文章的URL3.編寫 detail 視圖函數4.編寫詳情頁模板5.更改主頁中跳轉詳情頁的地址鏈接6.模板繼承--抽取base.html7.模板繼承--修改 index.html使其繼承base.html8.模板繼承--修改detail.html使其繼承base.html9.結果展示0.思路引…

10、并發容器,ConcurrentHashMap

Java 提供了不同層面的線程安全支持。在傳統集合框架內部&#xff0c;除了 Hashtable 等同步容器&#xff0c;還提供了所謂的同步包裝器&#xff08;Synchronized Wrapper&#xff09;&#xff0c;我們可以調用 Collections 工具類提供的包裝方法&#xff0c;來獲取一個同步的包…

程序員的本質

Computers are useless. They can only give you answers. – Picasso計算機沒有什么作用。他們只能告訴你答案。——畢加索很多人&#xff08;包括我岳母&#xff09;認為計算機變得如此智能&#xff0c;所以在不久的未來將不再需要程序員。另外一些人認為程序員是天才&#x…

模式-視圖-控制器模式2.0

1 MVC的實現   1.1 分析應用問題&#xff0c;對系統進行分離   分析應用問題&#xff0c;分離出系統的內核功能、對功能的控制輸入、系統的輸出行為三大部分。設計模型部件使其封裝內核數據和計算功能&#xff0c;提供訪問顯示數據的操作&#xff0c;提供控制內部行為的操作…

總體設計的原理

1 模塊化 2 抽象 3 逐步求精 4 信息隱藏和局部化 5 模塊獨立

android 手動回收對象,Android Studio Studio回收列表中的JSON對象

我想在recyclerview中顯示一些JSON對象&#xff0c;并且希望它們在日期之后排序&#xff0c;我該如何實現&#xff1f;下面是下載從JSON URL的數據的方法&#xff1a;Android Studio Studio回收列表中的JSON對象public void downloadFromSkistar(){try{URL url new URL("…

剖析管理所有大數據組件的可視化利器:Hue

歡迎關注大數據和人工智能技術文章發布的微信公眾號&#xff1a;清研學堂&#xff0c;在這里你可以學到夜白&#xff08;作者筆名&#xff09;精心整理的筆記&#xff0c;讓我們每天進步一點點&#xff0c;讓優秀成為一種習慣&#xff01; 日常的大數據使用都是在服務器命令行中…

Django博客--5.讓博客支持 Markdown 語法和代碼高亮

文章目錄0.前言1.安裝 Python Markdown2.在 detail 視圖中解析 Markdown3.safe 標簽4.代碼高亮5.效果展示0.前言 Markdown 是一種 HTML 文本標記語言&#xff0c;只要遵循它約定的語法格式&#xff0c;Markdown 的解析工具就能夠把 Markdown 文檔轉換為標準的 HTML 文檔&#…

耦合

模塊的獨立性很重要&#xff0c;因為有效的模塊化(即具有獨立的模塊)的軟件比較容易開發出來。 獨立的模塊比較容易測試和維護。 模塊的獨立程度可以由兩個定性標準度量&#xff0c;這兩個標準分別稱為內聚和耦合。 耦合 耦合是對一個軟件結構內不同模塊之間互連程度的度量。…

成為更優秀的開發人員:第二步-知道你的核心競爭力

編者按&#xff1a;原文作者羅布沃林&#xff08;Rob Walling&#xff09;從事Web應用開發10年之久&#xff0c;擔任過業內顧問、自由開發人員和全球最大的信用卡預付公司City of Pasadena的開發經理。現居住于加州中部城市弗雷斯諾&#xff08;Fresno&#xff09;。關注并指導…

android 字體間間隔,TextView設置行間距、字體間距

一、設置行間距1、設置行間距&#xff1a;android:lineSpacingExtra&#xff0c;取值范圍&#xff1a;正數、負數和0&#xff0c;正數表示增加相應的大小&#xff0c;負數表示減少相應的大小&#xff0c;0表示無變化2、設置行間距的倍數&#xff1a;android:lineSpacingMultipl…