2017第三次多校联合HDU6059
来源:互联网 发布:百度地图js api离线 编辑:程序博客网 时间:2024/06/05 17:03
题目
看了无数人的博客,冥思苦想终于搞明白了,都是泪啊。
题意:给你一个序列
k),满足i
题解:字典树。
用字典树处理前k-1个数,当前是第k个数。
显然,我们要寻找的i,j需要满足的条件可以转化为:
举个例子:当
所以利用数组
但是对于插入的第t位来说,j不一定只在它的同父节点的子树里,因为j只需满足
对于ext这个变量,我们在处理完一个点的时候,我们可以将这个点作为i,来寻找有多少个点可以与这个点形成i,j的关系,记录下来,最后一起减去。(因为我们插入的是第K个数,所以它一定是大于所有已经插入的数的,所以这里找到的情况都是不合法的)。
我就卡在这个ext这里卡了好久。。。难过。。。。
#include<bits/stdc++.h>using namespace std;#define ll long longconst int maxn=5e5+10;int cnt[31][2],a[maxn],num[30];struct bbq{ int nxt[2]; int cnt,ext;//cnt记录这个点被经过了几次。};bbq T[maxn*31];int tsize;long long ans;void calc(int tmp,int cnt){ ans+=T[tmp].cnt*1ll*(T[tmp].cnt-1)/2; ans+=(cnt-T[tmp].cnt)*1ll*T[tmp].cnt-T[tmp].ext;}void in(){ int tmp=0; for(int i=0;i<30;i++) { if(!T[tmp].nxt[num[i]]) T[tmp].nxt[num[i]]=++tsize; if(T[tmp].nxt[1-num[i]]) { calc(T[tmp].nxt[1-num[i]],cnt[i][1-num[i]]); } tmp=T[tmp].nxt[num[i]]; T[tmp].cnt++; T[tmp].ext+=cnt[i][num[i]]-T[tmp].cnt; }}int main(){ int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); memset(num,0,sizeof num); memset(cnt,0,sizeof cnt); memset(T,0,sizeof T); ans=tsize=0; for(int i=0;i<n;i++) { scanf("%d",&a[i]); int temp=a[i]; for(int j=29;j>=0;j--) { num[j]=temp%2; cnt[j][temp%2]++; temp/=2; } in(); } printf("%lld\n",ans); }}
- 2017第三次多校联合HDU6059
- 2017多校联合第三场/hdu6059 Kanade's trio(tire tree)
- 2017第三次多校联合hdu6060
- 2017第三次多校联合hdu6058
- 2017多校训练Contest3: 1004 Kanade's sum hdu6059
- 多校联合第三次题解(网页打不好开,扒下来看)
- 7/26第三次多校
- 2017第一次多校联合Balala Power!
- 2017第一次多校联合 1006Function
- 2017第二次多校联合hdu6047Maximum Sequence
- 2017第二次多校联合Regular polygon
- 2017第二次多校联合hdu6053Tirck Gcd
- 2017第一次多校联合 hdu6035Colorful Tree
- 2017第二次多校联合Funnyfunction
- 2017第二次多校联合 hdu6052 tobemyboyfriend
- 2014年第三次多校总结
- HDU6059-Kanade's trio
- 多校联合1004,hdu3832
- lambd表达式reduce的应用
- NSIS学习笔记(以Qt4程序打包为例)
- Linux系统-耗时检测-gprof操作入门
- windows生成git ssh密钥
- LeetCode 447 Number of Boomerangs
- 2017第三次多校联合HDU6059
- Android Activity 生命周期中onStart()和onResume()的区别
- easyui-tree根据叶子节点获取父节点值(N层)
- gulp常用插件和工具
- 纯干货|最经典的STM32-M3概述!
- PhantomJS简介
- Code forces798D(随机排列函数random_shuffle的应用)
- 数据库连接池定义、原理及使用
- 汇编程序调用C函数需要设置栈的原因