HRBUST 1717 字典树模板
Posted 天翎月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HRBUST 1717 字典树模板相关的知识,希望对你有一定的参考价值。
之前写字典树虽然很熟也能变化 但是一直是到了场上再乱写 写的很长 于是准备写个短点的板子
于是选了个水题 然而写出了1W个bug
insert和query反而写的没什么问题..
L c[100050] ; struct node { L v[2] ; L num[2] ; }a[100000 * 64]; L tot ; L b[100] ; L f[100] ; node newnode() { node cc ; cc.v[0] = cc.v[1] = -1 ; cc.num[0] = cc.num[1] = 0 ; return cc ; } void init() { tot = 0 ; f[60] = 1 ; dow(i,59,1) { f[i] = f[i+1] * 2 ; } a[0] = newnode() ; } void fj(L x) { dow(i,60,1) { b[i] = x%2 ; x/=2 ; } } void inse(L z,L val) { fj(z) ; L rt = 0 ; rep(i,1,60) { L x = b[i] ; if(a[rt].v[x] == -1) { tot ++ ; a[rt].v[x] = tot ; a[tot] = newnode() ; } a[rt].num[x] += val ; rt = a[rt].v[x] ; } } L query(L z) { fj(z) ; L rt = 0 ; L ans = 0 ; rep(i,1,60) { L x = b[i] ; if(a[rt].num[x^1] > 0 && a[rt].v[x^1] != -1) { ans += f[i] ; rt = a[rt].v[x^1] ; } else { rt = a[rt].v[x] ; } } return ans ; } L sum[100050] ; int main () { L n ; while(scanf("%lld" , &n) != EOF) { init() ; rep(i,1,n) c[i] = read() ; sum[0] = 0 ; rep(i,1,n) { sum[i] = c[i] ^ sum[i-1] ; } rep(i,0,n) inse(sum[i],1) ; L res = 0 ; L ans = query(0) ; dow(i,n,1) { inse(sum[i],-1) ; res ^= c[i] ; ans = max(ans , query(res)) ; } printf("%lld\n" , ans) ; } }
以上是关于HRBUST 1717 字典树模板的主要内容,如果未能解决你的问题,请参考以下文章