hdu5023 ( 廣州網路賽 ) 線段樹

2021-12-29 23:43:59 字數 2705 閱讀 2823

題意是給你n個連續的點(1-n) m次操作 開始每個點都為2

兩種操作

1:把一段區間的點變為c

2:詢問區間有多少種點

很明顯的線段樹 對每個節點

flash表示該節點是否全為一樣的數 若是 則flash=這個數否則 flash=-1;

陣列color記錄該節點輸得狀態 1表示有0表示沒有(我開成字元型 之前為int超類存了 真是無語)

然後 有更新和查詢操作

#include

#include

#includeusing namespacestd;#define ll(x) (x<<1)

#define rr(x) ((x<<1)|1)structnodenum[3*1000000];

intleap[31];

intchange(intmark,intk)

num[mark].color[k]='1';

return0;

}intdeal(intl,intr,intmark)

//注意題目說開始時每個點都是2

intupdate(intl,intr,intleft,intright,intmark,intk)

if(num[mark].flash>0)

if(right<=mid)

else if(left>mid)

else

for(inti=1;i<=30;i++)

elsenum[mark].color[i]='0';

}if(num[ll(mark)].flash==num[rr(mark)].flash&&num[ll(mark)].flash>0)num[mark].flash=num[ll(mark)].flash;

elsenum[mark].flash=-1;

return0;

}intfind(intl,intr,intleft,intright,intmark)

if(l==left&&r==right)

}if(right<=mid)

else if(left>mid)

else

return0;

}int main()

else

}printf("\n");}}

}return0;

}

hdu 5023 線段樹染色 狀壓

include using namespace std const int n 4 1e6 5 struct node a n n為總節點數 inline void update int k 更新節點k的sum void build int k 當前節點的編號 int l 當前區間的左邊界 int ...

成都網路賽 hdu 4288 4291 4296

成都網路賽結束了,還好我們這種渣渣學校拿到了個名額 hdu 4288 coder 這題開始我還想想用stl 來做,發現每次都要隔5個數加和,這樣統計的操作變成線性了,不行 然後想到線段樹,發現線段樹就很好做,每個點統計改點區間內mod 5的 5個和,在統計區間內元素的個數,然後就可以很方便的進行區間...

hdu 4414 2012杭州網路賽

給出乙個圖,要求 圖中 組成了多少個 十字架,要注意十字架的寬度是奇數,比賽的時候隊友 dfs過的,不過我這樣做也挺快。思路 對每個 進行判斷,上下左右 步長為1 2,25裡面是不是都是符合條件,符合的話判斷是不是個數為奇數即可 include includeconst int maxn 55 ch...