這個題我總是想用迴圈完成轉移,最後發現,還是手工列舉最靠譜~
建立線段樹,線段樹的每個節點(代表的是區間)維護以上六個值,true表示連通,false表示不連通,具體可以看我的**~
view code
1 #include 2 #include 3 #include 4 #include 5 #include 6感覺這個題還是挺神的~7#define n 11111189
using
namespace
std;
1011
struct
dat12
15 }dat[n<<2
];16
17bool a[n][2][2
];18
intn,r1,r2,c1,c2;
19int dx[3]=;
20int dy[3]=;
2122 inline void build(int u,int l,int
r)23
25int mid=(l+r)>>1
;26 build(u<<1,l,mid); build(u<<1|1,mid+1
,r);27}
2829 inline void pack(dat &u,dat &ls,dat &rs,int
mid)
3038
39 inline void updata(int u,int l,int r,int
p)40
47int mid=(l+r)>>1;48
if(p<=mid) updata(u<<1
,l,mid,p);
49else updata(u<<1|1,mid+1
,r,p);
50 pack(dat[u],dat[u<<1],dat[u<<1|1
],mid);51}
5253 inline void change(bool
pd)54
6364 inline void getpack(dat &p,int u,int l,int r,int l,int
r)65
67int mid=(l+r)>>1;68
if(r<=mid) getpack(p,u<<1
,l,mid,l,r);
69else
if(l>=mid+1) getpack(p,u<<1|1,mid+1
,r,l,r);
70else
7177}78
79 inline void
getans()
8093
else
9498}99
else
100106
else
107111
}112
}113
114 inline void
go()
115128
}129
130int
main()
131
BZOJ 1018 堵塞的交通 線段樹維護連通性
rightarrow 戳我進bzoj原題 time limit 3 sec quad memory limit 162 mb有一天,由於某種穿越現象作用,你來到了傳說中的小人國。小人國的布局非常奇特,整個國家的交通系統可以被看成是乙個 2 行 c 列的矩形網格,網格上的每個點代表乙個城市,相鄰的城市...
bzoj 1018 堵塞的交通
傳送門 這是一道好題,不容易想到線段樹和維護的量。分析題目,考慮聯通方式,發現只有3種,我一開始的想法是結構分塊,使用並查集維護,o 1 新增很自然,刪除的話就暴力重建塊內的並查集o sqrt n 查詢的時候仍然考慮並查集維護,求出關鍵點 上下左右4個 和他們之間的聯通性,數量級是o sqrt n ...
bzoj1789 AHOI 維護數列(線段樹)
首先想到線段樹,然後剛開始寫忽然想到樹狀陣列求和豈不是更快,而且程式設計複雜度又小,於是把之前寫的刪掉,寫樹狀陣列,寫完模版之後忽然發現這題竟然是區間修改!於是又刪掉重寫,忽然發現不會處理又加又乘的,果斷看題解 經過幾乎兩個小時的除錯,終於1a。需要注意的是,一定要讓線段樹的每乙個區間儲存的值時刻為...