1. 程式人生 > >線段樹詳解 (原理,實現與應用)

線段樹詳解 (原理,實現與應用)

比如,以左側的的藍色為例,若該節點是其父節點的右子節點,就證明它右側的那個紫色節點不會留下,會被其父替代,所以沒必要在這一步計算,若該節點是其父節點的左子節點,就證明它右側的那個紫色節點會留在這一層,所以必須在此刻計算,否則以後都不會再計算這個節點了。這樣逐層上去,容易發現,對於左側的藍色節點來說,只要它是左子節點,那麼就要計算對應的右子節點。同理,對於右側的藍色節點,只要它是右子節點,就需要計算它對應的左子節點。這個計算一直持續到左右藍色節點的父親為同一個的時候,才停止。於是,區間查詢,其實就是兩個藍色節點一路向上走,在路徑上更新答案。這樣,區間修改就變成了兩條同時向根走的鏈,明顯複雜度O(log2(n))。並且可以非遞迴實現。

相關推薦

線段 原理實現應用

比如,以左側的的藍色為例,若該節點是其父節點的右子節點,就證明它右側的那個紫色節點不會留下,會被其父替代,所以沒必要在這一步計算,若該節點是其父節點的左子節點,就證明它右側的那個紫色節點會留在這一層,所以必須在此刻計算,否則以後都不會再計算這個節點了。這樣逐層上去,容易發現,對於左側的藍色節點來說,只要它是左

線段單點更新成段更新\區間更新操作

      本文純屬原創,轉載請註明出處,謝謝。         距離第一次接觸線段樹已經一年多了,再次參加ACM暑假集訓,這一次輪到我們這些老傢伙們給學弟學妹們講解線段樹了,所以就自己重新把自己做過的題目看

CGI原理配置及訪問

一.基本原理 CGI:通用閘道器介面(Common Gateway Interface)是一個Web伺服器主機提供資訊服務的標準介面。通過CGI介面,Web伺服器就能夠獲取客戶端提交的資訊,轉交給伺服器端的CGI程式進行處理,最後返回結果給客戶端。 組成CGI通訊系統的是兩

Redis原理安裝配置使用命令

一、Redis介紹 Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。 Redis能執行在大多數POSIX(Li

快速排序演算法原理實現和時間複雜度

快速排序是對氣泡排序的一種改進,由 C.A.R.Hoare(Charles Antony Richard Hoare,東尼·霍爾)在 1962 年提出。 快速排序的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料比另一部分的所有資料要小,再按這種方法對這兩部分資料分別進行快速排

線段原理單點更新 區間查詢

這道題是線段樹的  單點更新和區間查詢最大值 (AC程式碼在最後) 通過這道題  理解下線段樹 線段樹的原理 關於原理   網上有很多講解 大家可以自己學習   這裡不單獨贅述原理 而是結合程式碼講解下   原理也不難  相信大家看了程式碼仔細看下邊的解釋可以理

紅黑Red-Black tree初步Java程式碼實現

紅黑樹Red-Blacktree初步詳解 本部落格的參考資料: 演算法導論 http://blog.csdn.net/v_july_v/article/details/6105630 http://www.cnblogs.com/skywang12345/p/3624343

《演算法導論》紅黑:Java實現Demo

使用Java簡單地實現紅黑樹,程式碼如下: /** * 紅黑樹實現demo */ public class RedBlackTree<Key extends Comparable<Key>> { private stati

基礎篇:原理volatile+cas、synchronized的底層實現

[TOC](目錄) - 隨著多程序多執行緒的出現,對共享資源(裝置,資料等)的競爭往往會導致資源的使用表現為隨機無序 - 例如:一個執行緒想在控制檯輸出"I am fine",剛寫到"I am",就被另一執行緒搶佔控制檯輸出"naughty",導致結果是"I am naughty";對於資源的被搶佔使用,我們

線段

延遲 操作 void space i++ 排序 string ++ 處理 #include"stdio.h"#include"cstdio"#include"algorithm"#include"string.h"using namespace std;/*********

Urllib庫的urlopenresponserequestHeadler異常處理URL解析

簡介 Urllib是Python內建的HTTP請求庫。它包含四個模組: urllib.request :請求模組 urllib.error :異常處理模組 urllib.parse url : 解析模組 urllib.robotparser :robots.

UML中常見關係泛化、實現、依賴、關聯、組合、聚合

UML中類與類,已經類與介面,介面與介面的關係有:泛化(generalization),關聯(association),依賴(dependency),實現(realization)這幾種。   泛化(generalization)關係時指一個

iOS AppDelegate 代理啟動開啟App,推送通知

//App將要啟動 - (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions{ return YES;

python中的幾個高階問題__init__裝飾器執行步驟@staticmethod和@classmethod區別單例模式魔法方法object繼承不繼承區別

第一個問題,init 在定義一個類時,什麼時候用__init__函式,什麼時候不用,用不用有什麼區別? 首先__init__是為了初始化用的,但是初始化的時候不一定要用這個,直接定義也是可以的,比如 class A(object): test_a = '123' 而我們用__

Android 獲取手機儲存資訊記憶體外存等

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); //系統記憶體資訊 ActivityManager.MemoryInfo memInfo = new ActivityManager

Python時間獲取Django獲取時間模板中獲取時間navie時間和aware時間

# 1、Python獲取到的時間 import pytz from datetime import datetime now = datetime.now() # 這個時間為navie時間(自己不

FFmpeg解碼原理函式使用說明

視訊解碼知識 •純淨的視訊解碼流程 ▫壓縮編碼資料->畫素資料。 ▫例如解碼H.264,就是“H.264碼流->YUV”。 •一般的視訊解碼流程 ▫視訊碼流一般儲存在一定的封裝格式(例如MP4、AVI等)中。封裝格式中通常還包含音訊碼流等內容。 ▫對於封裝格式中的

JAVA BIO,NIO,AIO附程式碼實現

這幾天在看面試的東西,可能是自己比較笨,花了快兩天的時間才理清楚。特此記錄一下。 首先我們要理解的一個很重要概念是,客戶端連線和傳送資料是分開的,連線不代表立馬會傳輸資料。 說說BIO,NIO,AIO到底是什麼東西 BIO:同步堵塞 NIO:非同步堵塞 AIO:非同步非堵塞

_010_Html_html5的float屬性超displayposition float文字流

一、總結 1、文字流: 2、float和絕對定位都不佔文字流的位置 3、普通流是預設定位方式,就是依次按照文字流的位置順序佈局。 4、相對定位可以看作特殊的普通流定位。相對定位的元素是相對自己本身的位置(在普通流中)進行定位。 5、position的absolu

連結串列的插入和刪除操作C語言實現+註釋

連結串列的基本操作中,連結串列結點的插入和刪除相對比較複雜,需根據結點插入位置的不同,使用合理的方法在不破壞原連結串列結構的前提下將其插入到連結串列中。 本節將詳解介紹這兩種操作的具體實現方法,讀者只需牢記實現步驟,即可輕鬆解決這兩大難點。 連結串列中插入結點 連結串列中插入結點,根據插入位置的不同,可