cdq 三維偏序應用 / P4169 [Violet] 天使玩偶/SJY擺棋子

最近學了 cdq 分治想來做做這道題,結果被有些毒瘤的代碼惡心到了。 /ll

題目大意:一開始給定一些平面中的點。然后給定一些修改和詢問:

  • 修改:增加一個點。
  • 詢問:給定一個點,求離這個點最近(定義為曼哈頓距離最小)的點離這個點的曼哈頓距離。(注意這個點并不加入平面)

其他細節詳見 題目傳送門 。

顯然一開始給定的點可以看作是一開始的修改。現在就只有修改和查詢了。

發現這里的曼哈頓距離有兩個絕對值,考慮拆一下絕對值,顯然我們可以拆出這個式子:

  • 如果 A x ≤ B x , A y ≤ B y A_x \le B_x,A_y \le B_y Ax?Bx?,Ay?By?,也就是 A A A 在平面上面的距離在 B B B 的左下方,則 A A A B B B 的距離 dist ( A , B ) = ( B x + B y ) ? ( A x + A y ) \text{dist}(A,B) = (B_x+B_y)-(A_x+A_y) dist(A,B)=(Bx?+By?)?(Ax?+Ay?)

那么該怎么處理其他方面的點呢:左上方、右下方、右上方???從左下方通過坐標變換旋轉一下就可以同樣處理了。所以我們現在只需要處理 A A A B B B 的左下方的情況即可!

發現在這個式子里面, A A A B B B 是獨立的。如果 B B B 是一個詢問的點,那么在其左下方的點中( A x ≤ B x , A y ≤ B y A_x \le B_x,A_y \le B_y Ax?Bx?,Ay?By?),若要使其詢問的答案最小,顯然需要使 A x + A y A_x+A_y Ax?+Ay? 的值最大,這個是可以預處理出來的。

而且還需要保證 A A A 的出現時間在 B B B 的前面。

這個時候我們梳理一下在 A A A B B B 左下方的這種情況下, A A A B B B 產生貢獻的條件當且僅當:

  • A t ≤ B t A_t \le B_t At?Bt?,也就是 A A A B B B 前面出現。
  • A x ≤ B x , A y ≤ B y A_x \le B_x,A_y \le B_y Ax?Bx?,Ay?By?,也就是 A A A B B B 左下方。

這不就是三維偏序嗎!!!!所以直接使用 cdq 三維偏序即可。

代碼可能有點難寫,但是有很長一段都是很基礎的。

#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;struct que {bool f;int id, x, y;
} ori[N], val[N], a[N];
int n, m;
int mx = 0, my = 0;
int ans[N];bool cmp1(que x, que y) {if (x.id != y.id)return x.id < y.id;if (x.x != y.x)return x.x < y.x;return x.y < y.y;
}bool cmp2(que x, que y) {return x.x < y.x;
}struct BIT {int tree[N];void clear(int pos) {for (; pos <= my; pos += pos & -pos)if (tree[pos])tree[pos] = 0;elsereturn ;}void add(int pos, int val) {for (; pos <= my; pos += pos & -pos)tree[pos] = max(tree[pos], val);}int query(int pos) {int ans = 0;for (; pos; pos -= pos & -pos)ans = max(ans, tree[pos]);return ans;}
} st;void cdq(int l, int r) {if (l + 1 == r)return ;int mid = (l + r) / 2;cdq(l, mid);sort(val + l, val + mid, cmp2);sort(val + mid, val + r, cmp2);int pos = l;for (int i = mid; i < r; i++) {if (val[i].f)continue;for (; pos < mid && val[pos].x <= val[i].x; pos++)if (val[pos].f)st.add(val[pos].y, val[pos].x + val[pos].y);int x = st.query(val[i].y);if (x > 0)ans[val[i].id] = min(ans[val[i].id], val[i].x + val[i].y - x);}for (int i = l; i <= pos; i++)st.clear(val[i].y);copy(ori + l, ori + r, val + l);cdq(mid, r);
}int main() {cin >> n >> m;for (int i = 1; i <= n; i++) {int x, y;cin >> x >> y, x++, y++;ori[i] = {1, i, x, y};mx = max(mx, x), my = max(my, y);}for (int i = 1; i <= m; i++) {int op, x, y;cin >> op >> x >> y;x++, y++;mx = max(mx, x), my = max(my, y);if (op == 1)ori[i + n] = {1, i + n, x, y};elseori[i + n] = {0, i + n, x, y};}n += m, mx++, my++;for (int i = 1; i <= n; i++)ans[i] = 1e9;copy(ori + 1, ori + n + 1, a + 1);//cdqsort(ori + 1, ori + n + 1, cmp1);copy(ori + 1, ori + n + 1, val + 1);cdq(1, n + 1);//---copy(a + 1, a + n + 1, ori + 1);for (int i = 1; i <= n; i++)ori[i].x = mx - ori[i].x;sort(ori + 1, ori + n + 1, cmp1);copy(ori + 1, ori + n + 1, val + 1);cdq(1, n + 1);//---copy(a + 1, a + n + 1, ori + 1);for (int i = 1; i <= n; i++)ori[i].y = my - ori[i].y;sort(ori + 1, ori + n + 1, cmp1);copy(ori + 1, ori + n + 1, val + 1);cdq(1, n + 1);//---copy(a + 1, a + n + 1, ori + 1);for (int i = 1; i <= n; i++)ori[i].x = mx - ori[i].x, ori[i].y = my - ori[i].y;sort(ori + 1, ori + n + 1, cmp1);copy(ori + 1, ori + n + 1, val + 1);cdq(1, n + 1);for (int i = 1; i <= n; i++)if (a[i].f == 0)cout << ans[i] << endl;return 0;
}

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

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

相關文章

System.Threading.Tasks 庫簡介

System.Threading.Tasks 是 .NET 中任務并行庫(Task Parallel Library, TPL)的核心組件&#xff0c;它提供了基于任務的異步編程模型&#xff0c;是現代 .NET 并發編程的基礎。 設計原理 1. 核心目標 抽象并發工作&#xff1a;將并發操作抽象為"任務"概念 資源高效…

Python爬蟲實戰:研究jieba相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網技術的飛速發展,網絡新聞已成為人們獲取信息的主要渠道之一。每天產生的新聞文本數據量呈爆炸式增長,如何從海量文本中高效提取有價值的信息,成為信息科學領域的重要研究課題。文本分析技術通過對文本內容的結構化處理和語義挖掘,能…

github 淘金技巧

1. 效率&#xff0c;搜索&#xff0c;先不管。后面再說。 2. 分享的話&#xff0c; 其實使用默認的分享功能也行。也是后面再說。此 app &#xff0c; 今天先做到這里。 下面我們再聊點其他東西。其實我還想問&#xff0c;這個事情&#xff0c;其他人是否也做了&#xff0c; ht…

RAG技術發展綜述

摘要 檢索增強生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;技術已成為大語言模型應用的核心技術棧。RAG有效解決了LLM的幻覺問題、知識截止和實時更新挑戰&#xff0c;目前正處于全面產業化階段。本文系統性地分析RAG的全棧技術架構&#xff0c;包括檢索…

集群聊天服務器---muduo庫(3)

使用muduo網絡庫進行編譯和鏈接的示例 項目的目錄結構 bin: 存放可執行文件。 lib: 存放庫文件。 include: 存放頭文件。 src: 存放源代碼文件。 build: 存放編譯生成的中間文件。 example: 存放示例代碼。 thirdparty: 存放第三方庫。 CMakeLists.txt: CMake構建系統…

雙核SOC/5340 應用和網絡核間通訊

1&#xff1a; 可以在 nRF Connect SDK 文件夾結構的 samples/ipc/ipc_service 下找到示例&#xff0c;應用和網絡核心在由 CONFIG_APP_IPC_SERVICE_SEND_INTERVAL 選項指定的時隙內相互發送數據。可以更改該值并觀察每個核心的吞吐量如何變化 nRF5340 DK 可以使用 RPMsg 或 IC…

Spring Cloud Ribbon核心負載均衡算法詳解

Ribbon 作為 Spring Cloud 生態中的客戶端負載均衡工具&#xff0c;提供多種動態負載均衡算法&#xff0c;根據后端服務狀態智能分配請求。其核心算法及適用場景如下&#xff1a; &#x1f9e0; 一、Ribbon 負載均衡算法 算法名稱工作原理引用來源輪詢 (RoundRobinRule)按服務…

網站圖片過于太大影響整體加載響應速度怎么辦? Typecho高級圖像處理插件

文章目錄 LeleImges - Typecho高級圖像處理插件 ???插件介紹 ??插件架構 ???主要功能 ?性能優勢 ??系統要求 ??安裝方法 ??詳細配置說明 ??圖片質量設置 ???最大寬度/高度限制 ??壓縮格式選擇 ???壓縮方法選擇 ??GIF處理方式 ???備份源文件 ??…

VUE3入門很簡單(1)--- 響應式對象

前言 重要提示&#xff1a;文章只適合初學者&#xff0c;不適合專家&#xff01;&#xff01;&#xff01; 什么是響應式對象&#xff1f; 在Vue3中&#xff0c;響應式對象就是這種智能溫控器。當你修改JavaScript對象的數據時&#xff0c;Vue會自動更新網頁上顯示的內容&am…

廣州華銳互動攜手中石油:AR 巡檢系統實現重大突破?

廣州華銳互動在 AR 技術領域的卓越成就&#xff0c;通過一系列與知名企業、機構的成功合作案例得以充分彰顯。其中&#xff0c;與中石油的合作項目堪稱經典&#xff0c;展現了廣州華銳互動運用 AR 技術解決實際難題、達成目標的強大實力。? 中石油作為能源行業的巨擘&#xff…

權威認證!華宇TAS應用中間件榮獲CCRC“中間件產品安全認證”

近日&#xff0c;華宇TAS應用中間件順利通過了中國網絡安全審查認證和市場監管大數據中心(CCRC)的信息安全認證&#xff0c;獲得了IT產品信息安全認證證書。此次獲證&#xff0c;標志著華宇TAS應用中間件在安全性、可靠性及合規性等方面達到行業領先水平&#xff0c;可以為政企…

BI財務分析 – 反映盈利水平利潤占比的指標如何分析(下)

之前的文章重點把構成銷售凈利率、主營業務利潤率、成本費用利潤率、營業利潤率、銷售毛利率的分母像銷售收入、營業收入、主營業務收入凈額、成本費用總額做了比較細致的說明&#xff0c;把這幾個基本的概念搞明白后&#xff0c;再來看這幾個指標就比較容易理解了。 銷售凈利…

竹云受邀出席華為開發者大會,與華為聯合發布海外政務數字化解決方案

6月20日-22日&#xff0c;華為開發者大會&#xff08;HDC 2025&#xff09;在東莞松山湖盛大召開。作為華為一年一度面向全球開發者的頂級科技盛會&#xff0c;今年的HDC不僅帶來了HarmonyOS 6.0 Beta版本、盤古大模型5.5等多項重磅技術和產品更新&#xff0c;更聚集了全球極客…

AI助力游戲設計——從靈感到行動-靠岸篇

OK&#xff0c;朋友&#xff0c;如果你到了這里&#xff0c;那就證明這趟旅程&#xff0c;快要到岸了。 首先&#xff0c;恭喜你&#xff0c;到了需要這一步的時候。其實&#xff0c;如果你有一天真的用到了&#xff0c;希望你可以回來打個卡。行了&#xff0c;不廢話&#xf…

vue將頁面導出pdf,vue導出pdf ,使用html2canvas和jspdf組件

vue導出pdf 需求&#xff1a;需要前端下載把當前html下載成pdf文件–有十八頁超長&#xff0c;之前使用vue-html2pdf組件&#xff0c;但是這個組件有長度限制和比較新瀏覽器版本限制&#xff0c;所以改成使用html2canvas和jspdf組件 方法&#xff1a; 1、第一步&#xff1a;我…

024 企業客戶管理系統技術解析:基于 Spring Boot 的全流程管理平臺

企業客戶管理系統技術解析&#xff1a;基于Spring Boot的全流程管理平臺 在企業數字化轉型的浪潮中&#xff0c;高效的客戶管理系統成為提升企業競爭力的關鍵工具。本文將深入解析基于Java和Spring Boot框架構建的企業客戶管理系統&#xff0c;該系統涵蓋員工管理、客戶信息管…

JavaScript性能優化代碼示例

JavaScript性能優化實戰大綱 性能優化的核心目標 減少加載時間、提升渲染效率、降低內存占用、優化交互響應 代碼層面的優化實踐 避免全局變量污染&#xff0c;使用局部變量和模塊化開發 減少DOM操作頻率&#xff0c;批量處理DOM更新 使用事件委托替代大量事件監聽器 優化循…

樹的重心(雙dfs,換根)

思路&#xff1a; 基于樹形 DP 的兩次遍歷&#xff08;第一次dfs計算以某個初始根&#xff08;這里選了 1&#xff09;為根時各子樹的深度和與節點數&#xff0c;第二次zy進行換根操作&#xff0c;更新每個節點作為根時的深度和&#xff09; 換根原理&#xff1a; 更換主根&…

官方App Store,直鏈下載macOS ,無需Apple ID,macOS10.10以上.

前言 想必很多人都有過維修老舊Mac的體驗,也有過想要重裝macos的體驗. 尤其是前者,想要重裝或者升級系統,由于官方已經無法更新,必須下載iSo鏡像 這時就會遇到死循環:想要更新macOS ,必須先使用更高版本的App Store,但要使用更高版本的App Store,必須先更新macOS !!! 如果想…

芋道生成前端界面代碼詳解

一、搜索框 1、整體架構 <ContentWrap> ... </ContentWrap><ContentWrap> 是頁面布局容器&#xff08;可能是自定義組件&#xff09;&#xff0c;包裹住頁面的內容區域。 2、el-form 表單&#xff08;搜索區域&#xff09; 2.1參數 <el-formclass&quo…