在抗日戰爭期間,華北平原廣大地區進行了大規模的隧道戰。 一般來說,通過隧道連線的村莊排成一列。 除了兩端,每個村莊都與兩個相鄰的村莊直接相連。input入侵者經常對一些村莊發動襲擊並摧毀其中的部分隧道。 八路軍指揮官要求最新的隧道和村莊連線狀態。 如果某些村莊嚴重隔離,必須立即恢復連線!
輸入的第一行包含兩個正整數n和m(n,m≤50,000),表示村莊和事件的數量。 接下來的m行中的每一行描述乙個事件。output以下所示的不同格式描述了三種不同的事件:
d x:第x個村莊被毀。
r:最後毀壞的村莊被重建了。
按順序輸出每個指揮官詢問的答案。sample input
7 9sample outputd 3d 6
d 5q 4
q 5r
q 4r
q 4
102sponsor4
傳送門
定義線段樹:
ll 記錄區間左端點開始的最大連續個數, rr 記錄區間右端點開始的最大的連續個數,
ml表示該區間最大的連續點的個數。
structnodet[maxn];
建樹:
void build(int p,int l,intr)
int mid=(t[p].l+t[p].r)/2
; build(p*2
,l,mid);
build(p*2+1,mid+1
,r);
}
更新:
void update(int p,int x,intval)
if(x<=t[2*p].r)
else
//更新正個區間
t[p].ml=max(t[2*p].ml,t[2*p+1].ml);//
可能有斷層l---1 1--mid ,mid----1 1-----r
t[p].ml=max(t[p].ml,t[2*p].rr+t[2*p+1].ll);//
左區間最右,和右區間的最左
//更新左區間
t[p].ll=t[2*p].ll;
if(t[p].ll==t[2*p].r-t[2*p].l+1)
t[p].rr=t[2*p+1
].rr;
if(t[p].rr==(t[2*p+1].r-t[2*p+1].l+1
))
}
查詢:
int query(int p,int x)if(x<=t[2*p].r)
else
}else
else
}}
#include#includeusing
namespace
std;
const
int maxn=1e6+100
;int
top;
intq[maxn];
struct
nodet[maxn];
void build(int p,int l,int
r)
int mid=(t[p].l+t[p].r)/2
; build(p*2
,l,mid);
build(p*2+1,mid+1
,r);
} void update(int p,int x,int
val)
if(x<=t[2*p].r)
else
//更新正個區間
t[p].ml=max(t[2*p].ml,t[2*p+1].ml);//
可能有斷層l---1 1--mid ,mid----1 1-----r
t[p].ml=max(t[p].ml,t[2*p].rr+t[2*p+1].ll);//
左區間最右,和右區間的最左
//更新左區間
t[p].ll=t[2*p].ll;
if(t[p].ll==t[2*p].r-t[2*p].l+1)
t[p].rr=t[2*p+1
].rr;
if(t[p].rr==(t[2*p+1].r-t[2*p+1].l+1
))
}int query(int p,int x)
if(x<=t[2*p].r)
else
}else
else
}}int
main()
else
if(str[0]=='q'
)
else}}
}
hdu1540(線段樹維護連續區間模型)
translation 打地道戰,n個村莊用地道連成一條直線,鬼子有時破壞掉乙個村莊,這時八路軍要修好這個據點。現在要求詢問任意乙個村莊,得出這個村莊現在與幾個村莊相連,包括它本身。solution 線段樹維護連續子區間 將村莊抽象成乙個點,正常下值為1,被破壞後變成0,即可將題目抽象成乙個求目標節...
線段樹區間合併 連續區間問題
hdu 1540 資料很奇葩。用討論區裡面的話形容這題很合適 九九八十一難,這道題比北大的資料真是坑出翔來了 poj 2892 原題 一摸一樣 題意 給定n個村莊排成一行,它們相鄰的村莊通過地道相連,有三種操作 1 炸毀第x個村莊 2 修復上乙個被炸毀的村莊 3 詢問 輸出 第x個村莊還能和幾個村莊...
線段樹3(離散化,連續區間)
題目是依次按給定的範圍貼海報,問覆蓋到最後還能看到幾張海報。因為給定的貼海報的板子總長度為10 9,陣列開不下。但是考慮到海報只有10 5張,而整個問題其實課忽略板子長度,只需要考慮每張海報之間的覆蓋關係就可以了,也就是說 1,1000008 3,9990 10,20000000 這三個區間的覆蓋情...