Buy Tickets(POJ2828)線段樹解法

2021-05-26 12:13:23 字數 960 閱讀 7084

先說說線段樹版的poj2828吧。

這道題讓我除錯了很長時間,最後才發現原來出現了乙個很隱蔽的小問題上。。。。。。

這道題的題目意思很簡單,就是乙個佇列,每個人都不停地插隊,讓你求出最後的佇列是什麼。

典型的逆向思維的題目,如果對線段樹理解不深刻的話,很難想到用線段樹實現,我們不是從前往後插入線段,而是倒序插入線段。

因為最後乙個人一定在他想在的位置上,然後插入這個點,同時把這個點所在的線段記錄的數-1來表示這個位置已經被占領過,因此下乙個人想要進入這個位置的話,只能在後面插入。

program poj2828;

const maxn=200001;

type tre=record

l,r,lc,rc,data:longint;

end;

type atp=record

num,val:longint;

end;

var root,tot,n,i:longint;

ans:array [0..maxn] of longint;

tree:array [0..maxn*4] of tre;

a:array [0..maxn] of atp;

procedure build(var t:longint;l,r:longint);

begin

inc(tot);

t:=tot;

tree[t].l:=l;

tree[t].r:=r;

tree[t].data:=r-l+1;//data域記錄這個區間所含點的數目

if lm do dec(j);

if i<=j then

begin

t:=a[i];

a[i]:=a[j];

a[j]:=t;

inc(i);

dec(j);

end;

until i>j;

if i

2 8 後向引用

當乙個正規表示式被分組之後,每乙個組將自動被賦予乙個組號,該組號可以代表該組的表示式。其中,組號的編制規則為 從左到右 以分組的左括號 為標誌,第乙個分組的組號為1,第二個分組的組號為2,以此類推。反向引用提供查詢重複字元組的方便的方法。它們可被認為是再次匹配同乙個字串的快捷指令。後向引用可以使用數...

(28)迭代語句

迭代語句通常稱為迴圈,它重複執行操作直到滿足某個條件才停下來。while和for語句在執行迴圈體之前檢查條件,do while語句先執行迴圈體,然後再檢查條件。只要條件為真,while語句就重複的執行迴圈體,它的語法形式是 while condition statement 定義在while條件部分...

(回溯2)8皇后

題目 會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1b2 b8,其中bi為相應擺法中第i行皇后所處的列數。已經知道...