先說說線段樹版的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行皇后所處的列數。已經知道...