2015-12-07 22:07:37
【傳送門】
題意:一棵樹有n個節點,編號為1到n,每條邊都有邊權。定義f(u,v)為從u到v路徑上所有邊權的異或和。給定乙個數m,有q次查詢,每次給定乙個區間[l,r],詢問有多少對(u,v)滿足f(u,v)>m (l <=u
思路:考慮離線莫隊,先處理處f[i]表示從根1到點i的路徑的xor和。對於更改,等價於處理從乙個點出發到若干個點的路徑xor和大於m的個數。可以用字典樹存下當前存在的所有路徑xor和,當查詢時,如果要》m,必然是二進位制下某一位,xor和為1,m為0,且比該位高的數字都相同。那麼就可以在字典樹上記錄一下子樹大小sz,然後列舉不同的那一位。
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include9 #include 10 #include 11 #include
12 #include 13 #include 14
using
namespace
std;
1516
#define getmid(l,r) ((l) + ((r) - (l)) / 2)
17#define mem(a,b) memset(a,b,sizeof(a))
18#define mp(a,b) make_pair(a,b)
19#define pb push_back
2021 typedef long
long
ll;22 typedef pairpii;
23const
double eps = 1e-8;24
const
int inf = (1
<< 30) - 1;25
const
int maxn = 100010;26
27int
n,m,q;
28int
block,tot;
29int
first[maxn],ecnt;
30int
f[maxn];
31int ms[30
];32
ll ans;
3334
struct
edgee[maxn << 1
];37
38struct
nodeq[maxn];
4243
struct
triet[maxn * 30
];47
48bool
cmp(node a,node b)
5152
bool
cmp_id(node a,node b)
5556 inline void clear(int
p)60
61void dfs(int p,int pre,int
cur)68}
6970
void insert_tree(int
v),sz = 0;72
int p = 0;73
while
(v)77
for(int i = 20; i >= 1; --i)
83 p =t[p].nxt[id];
84 t[p].sz++;85}
86}8788
void delete_tree(int
v),sz = 0;90
int p = 0;91
while
(v)95
for(int i = 20; i >= 1; --i)
101 p =t[p].nxt[id];
102 t[p].sz--;
103}
104}
105106 ll query_tree(int
v),sz = 0
;108
int p = 0
;109 ll res = 0
;110
while
(v)114
for(int i = 20; i >= 1; --i)
121else
126}
127return
res;
128}
129130 inline void add_edge(int u,int v,int
c)136
137void update(int l,int r,int
f)144
}145
146void
block()
158 sort(q + 1,q + q + 1
,cmp_id);
159for(int i = 1; i <= q; ++i)
162}
163164
intmain()
176for(int i = 1; i < n; ++i)
182 dfs(1,-1,0
);183
for(int i = 1; i <= q; ++i)
188block();
189}
190return0;
191 }
HDU6333 莫隊演算法
給你n,m求 i 0mcn i 1 09 7 sum m 10 9 7 i 0m cni 10 9 7 t組資料t 1 05,1 m,n 105 t leq 10 5,1 leq m,n leq 10 5 t 105,1 m,n 10 5。這題常規思路暴力求字首和時間複雜度和空間複雜度都是顯然不夠的...
HDU6333 莫隊演算法
給你n,m求 t組資料 這題常規思路暴力求字首和時間複雜度和空間複雜度都是顯然不夠的,所以,採用莫隊演算法將t個詢問排序,之後將m看做l,n看做r,通過觀察可以發現 所以首先將r加 減到指定行,之後對l進行加 減,設res為答案,即 r加的時候 r減的時候 l加的時候 l減的時候 具體見 inclu...
HDU6333 莫隊演算法
給你n,m求 i 0mc ni 109 7 role presentation style position relative mi 0ci n 10 9 7 i 0 mcni 109 7 t組資料t 105,1 m,n 105 role presentation style position re...