hdu4288 Coder(線段樹單點更新)

2022-03-28 07:37:47 字數 1316 閱讀 9811

題意:支援增刪,查操作,最後的序列式遞增的。

做法:主要是如何維護mod5的sum值,這裡左兒子可以不用管,關鍵是右兒子的處理,可以假設右兒子有t個節點,左兒子有cnt個節點,

則令(t+cnt)mod 5= i 則tmod5=(i-cnt mod 5)mod 5 ,所以剩下的就是維護每個節點的節點總數以及相應的和就好了。

1#include

2 #include

3 #include

4 typedef long

long ll;

5using

namespace std;

6#define lz u<<1,l,mid

7#define rz u<<1|1,mid+1,r

8const

int max = 100000+10;

9struct node

10 tree[max<<2];

13int num[max],rnum[max],check[max];

14void build(int u,int l,int r)

15 23 }

24void add(int u,int l,int r,int x,int d,int cur)

25 32

int mid=(l+r)>>1;

33if(x<=mid) add(lz,x,d,cur);

34else add(rz,x,d,cur);

35     tree[u].cnt=tree[u<<1].cnt+tree[u<<1|1].cnt;

36for(int i=0;i<5;i++)

37     

40 }

41int main()

42 56

else

if(str[0]=='d')

57             

61else  check[i]=3;

62         }

63         sort(rnum,rnum+cur);

64int tot=unique(rnum,rnum+cur)-rnum;

65if(tot!=0) build(1,1,tot);

66for(int i=0;i67         

73else

if(check[i]==2)

74             

78else

79             

85             }

86         }

87     }

88return

0;89 }

hdu 4288 Coder 成都賽區 線段樹

題意 給出乙個有序集合,3種操作。插入乙個數,刪除乙個數,都保證序列有序。以及求和 其中求和是將下標 5 3的所有數求和 題解 線段樹 離散化 離線處理 一開始也是想的 線段樹 但是 這個和以前的 做過的 乙個線段樹 不同的 是 如果 我們 刪除 乙個 元素後 那麼 他的 下標 將會 改變 比賽是 ...

hdu 4288 Coder(單點操作,查詢)

題意 三種操作 1.add x add the element x to the set 2.del x remove the element x from the set 3.sum find the digest sum of the set.the digest sum should be u...

無聊題目大紀實(HDU 4288 Coder)

這神題,暴力陣列可過,vector可過,線段樹可過。時限拉的太長了,所以就成水題了。不過比賽的時候真的沒敢用陣列暴力寫。說說線段樹的思路吧。對樹的每個節點 l,r,cnt,sum 5 分別表示左區間,右區間,這段區間上的點數,這段區間上sum x 5 的和。先把所有的資料都讀入,然後離散化,去掉重複...