NOIP資料結構概論

2021-08-28 18:56:23 字數 1439 閱讀 7674

先推薦一下codevs**,** 之前noip大多數都是在這裡面做題的

codeforces有空的,也可以嘗試一下,不過貌似都是英文的  

下面進入正題,noip所需要掌握的資料結構,下面的難度不一,但是都需要掌握,線段樹以及樹狀陣列會單獨列出

樹狀陣列,與線段樹作用差不多,相比之下要更好實現,而且常數要更小些。不過要注意樹狀陣列的陣列大小至少是原陣列的2倍。對於實現單點修改,區間查詢是很容易的,但如果要實現區間修改,區間查詢,那麼就要運用公式了。

區間樹狀陣列:

第一步 : 輸入 a[i] ,新起另乙個陣列 d[i]存 a[i]-a[i-1] 。

第二步:以 d[i] 為基礎構造c[i] 樹狀陣列,與普通樹狀陣列的第一步一樣。

第三步:當進行區間修改時,設輸入區間為[l,r], 增加量為sd[l]=d[l]+s;

d[r+1]=d[r]-s;

第四步:當求單點值時, a[i]=d[1]+d[2]+…..+d[i];

第五步:當求區間值時,第三步時對所有改變的 d[i] 依照普通樹狀陣列改變 c[i]的值,最後依照普通樹狀陣列,c[r]-c[l] 及可求值,我對普通樹狀陣列並不熟,尤其是第二步和第三步

樹狀陣列修改乙個結果後,若編號為

x ,則

x+x&(-x)

及其所求的父親節點

x-x&(-x)

及其所求的區間和

(r-l+1)*(d[1]+…+d[l-1])+(r+1)(d[l]+…+d[r])-(l*d[l]+(l+1)*d[l+1]+…r*d[r])

時間複雜度:建表o(nlogn),查詢o(1)。

st表目前最好用的地方就是求rmq,雖然線段數也可以做到時間複雜度和st表差不太多,但對於多詢問的話還是用st表來解題。主要分為兩個部分: 

預處理:dp思想倍增思想,用f[i][j]表示在(i,i+(1《查詢:dp思想,對於區間[l,r]的最值,由於根據f[i][j],先找出最大的k,滿足2^k<=r-l+1,為啥是這樣呢,根據先前f[i][j]的定義,k就是f陣列的第二維,也就是倍增的次數,那麼f[l][k]就表示了在所求區間內的(l,l+(1《棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。很簡單自己用系統棧或是用陣列模擬即可。

優先佇列是一種先進先出的資料結構,元素在佇列尾追加,而從佇列頭刪除。在優先佇列中,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除。優先佇列具有最高端先出 (first in, largest out)的行為特徵。優先佇列其實就是堆,考試中一般用的是系統堆。

bool operator

priority_queueq;

小根堆

資料結構概論

資料是資訊的載體,是描述客觀事物的數 字元 以及其他能夠記錄承載資訊的並且能夠被計算機讀入 識別以及處理的符號集合。為了有效的組織資料,也為了能夠更加方便的使用資料我們引入資料結構這一概念 資料結構由某一資料元素的集合和該集合中各個資料相互之間的關係組成。記為 圖1.資料結構示意圖 一句資料元素之間...

資料結構概論

一 資料結構 是相互之間存在一種或多種特定關係的資料元素的集合。資料機構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。1968年,美國的高德納在其所寫的 計算機程式設計藝術 中第一次較為系統的闡述了資料的邏輯結構和儲存結構及其操作。這個時候,資料結構才算是...

大話資料結構 資料結構概論

1.資料結構的邏輯結構 資料元素之間的相互關係 1.1 集合結構 集合結構之間的元素除了屬於同乙個集合之外,他們之間沒有任何其他關係,各個元素的關係是平等的 1.2 線性結構 元素之間存在一對一的關係,比如陣列,鍊錶 1.3 樹形結構 元素之間存在一對多的關係 2.資料結構的物理結構 在我看來,資料...