hdu6059 字典树维护数位统计异或对数
来源:互联网 发布:retrofit post json 编辑:程序博客网 时间:2024/06/07 03:22
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=5e5+5;void read(int &ret){ret=0;char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) ret=ret*10+ch-'0';return ret;}int nxt[N*30][2];int siz[N*30];int ss[N*30];int sum[30][2];int er[30],bit[30];int cnt;ll ans;void add(int x){ int p=1; for(int i=29;i>=0;i--) { int cur=x/er[i]; if(!nxt[p][cur]) nxt[p][cur]=++cnt; int li,ri; li=nxt[p][cur]; ri=nxt[p][cur^1]; if(ri) ans+=1LL*(siz[ri]-1)*siz[ri]/2+1LL*siz[ri]*(sum[i][cur^1]-siz[ri])-ss[ri]; ss[li]+=sum[i][cur]-siz[li]; siz[p=li]++; sum[i][cur]++; x&=(er[i]-1); }}int main(){ for(int i=0;i<30;i++)er[i]=1<<i; int t; read(t); while(t--) { int n; read(n); memset(nxt,0,sizeof(nxt)); memset(siz,0,sizeof(siz)); memset(sum,0,sizeof(sum)); memset(ss,0,sizeof(ss)); cnt=1; ans=0; for(int i=0;i<n;i++) { int x; read(x),add(x); } printf("%I64d\n",ans); }}
阅读全文
0 0
- hdu6059 字典树维护数位统计异或对数
- HDU6059 Kanade's trio(异或字典树)
- HDU6059(01字典树求异或最大值)
- HDU6059(两棵字典树)
- hdu6059 Kanade's trio(字典树)
- 统计难题(字典树或map容器)
- 字典树处理《异或》
- 统计难题(字典树)
- 统计难题【字典树】
- 统计难题 字典树
- 统计难题(字典树)
- 数位统计
- 数位统计
- 异或最大值(01字典树)
- CSU 1216 异或最大值【字典树】
- Trie树(字典树)实现词频统计或前缀匹配类型的问题
- HDU1251(静态维护字典树模板题)
- 字母树 字典树+统计
- poj 1050(DP)
- linux 使用技巧
- ASP.NET Web Pages – 对象
- Redis存储性能测试
- 《珠珠图案》教程一:字体、布局、保存。
- hdu6059 字典树维护数位统计异或对数
- JFreeChart-图表绘制
- L1-023. 输出GPLT
- 欢迎使用CSDN-markdown编辑器
- [Zabbix] 邮件告警
- 观察者模式
- 各种加密算法比较
- objective-C block作为参数使用
- 抓住技术与生活的结合