2017多校三 1004题 hdu 6059 Kanade's trio Trie树 计数

深入拆解:OpenMV如何驱动数字舵机实现高精度云台控制?从PWM原理到运动平滑算法 本文深入解析了OpenMV如何通过PWM信号和运动平滑算法驱动数字舵机实现高精度云台控制。从PWM原理到S型曲线运动算法,详细介绍了数字舵机的增强特性和时序精度优化方案,并结合嵌入式平台的实时性优化,为电赛和自动追踪系统开发者提供实用技术指导。 阅读详情

题目链接


题意:

Problem Description
Give you an array  A[1..n] ,you need to calculate how many tuples  (i,j,k)  satisfy that  (i<j<k)  and  ((A[i] xor A[j])<(A[j] xor A[k]))

There are T test cases.

1≤T≤20

1≤∑n≤5∗105

0≤A[i]<230


参考:

http://blog.youkuaiyun.com/u013944294/article/details/76577490 ——QQ小炫


看了很多题解...主流的做法是从左向右插入 a[k],对于 a[k] 的每一位,去看与它前面所有位都相同的而当前位不同的 a[i],即与 a[k] 的父亲的另一棵子树。只要 a[j] 的当前位与 a[i] 相同即可满足条件,所以再用一个 cnt[i][j] 记录第 i 位为 j (0/1) 的数字有多少个。另外,还需要处理的一个问题就是 i < j 的要求,这一点我没看太懂...

于是继续找,找到了上面那位博主的文章,觉得这种思路真的是很巧。


主要想法是枚举 a[j], 看有多少个 a[i] 及 a[k] 满足条件。

先将数组中所有数字插入到 trie 树中,此时记录下 sz[rt][1][bit],意为以 rt 为根的子树中下一位为 bit 的有多少个,中间一维的含义之后再解释。

然后再从左向右模拟一遍插入 a[j] 的过程,怎么模拟呢?

这里也引入 cnt 数组,但含义与上面那种不同。这里的 cnt[i][j] 意为更高位的前缀都相同,第 i 位左边为 j ,右边为 j ^ 1 的数对个数。显然,由其含义可知,cnt 累和即为答案。

对于 a[j] 的第 i 位,当我们把 a[j] 向左移(即划入左边那块时),

若其为 0,左 0 右 1 的个数,即 cnt[i][0] 的个数会增加右边第 i 位为 1 的数的个数,即 sz[rt][1][1]

 左 1 右 0 的个数,会减去左边左边第 i 位为 1 的个数,即 cnt[i][1] -= sz[rt][0][1]

若其为 1,左 0 右 1 的个数,会减少左边第 i 位为 0 的个数,即 cnt[i][0] -= sz[rt][0][0]

 左 1 右 0 的个数,会加上右边第 i 位为 0 的个数,即 cnt[i][1] += sz[rt][1][0]

总结一下 cnt[i][bit] += sz[rt][1][bit ^ 1];

cnt[i][bit ^ 1] -= sz[rt][0][bit ^ 1].


这样,每次进入循环时加上当前的数字作为 a[j] 时的种数,即 cnt[j][bit],然后将 a[j] 移到左边为下一次做准备。

对原Po佩服得五体投地...。


Code:

#include <bits/stdc++.h>
#define maxn 500010
typedef long long LL;
LL cnt[31][2];
int trie[maxn * 31][2], tot, a[500010], sz[maxn * 31][2][2];
void ins(int x) {
    int rt = 0;
    for (int i = 29; i >= 0; --i) {
        int bit = (x >> i) & 1;
        if (!trie[rt][bit]) trie[rt][bit] = ++tot;
        ++sz[rt][1][bit];
        rt = trie[rt][bit];
    }
}
LL query(int x) {
    int rt = 0;
    LL ans = 0;
    for (int i = 29; i >= 0; --i) {
        int bit = (x >> i) & 1;
        ans += cnt[i][bit];
        cnt[i][bit] += sz[rt][1][bit ^ 1];
        cnt[i][bit ^ 1] -= sz[rt][0][bit ^ 1];
//        printf("%d : %lld %lld\n", i, cnt[i][0], cnt[i][1]);
        --sz[rt][1][bit];
        ++sz[rt][0][bit];
        rt = trie[rt][bit];
    }
    return ans;
}
void work() {
    int n; tot = 0;
    memset(cnt, 0, sizeof(cnt));
    memset(trie, 0, sizeof(trie));
    memset(sz, 0, sizeof(sz));
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) {
        scanf("%d", &a[i]);
        ins(a[i]);
    }
    LL ans = 0;
    for (int i = 0; i < n; ++i) ans += query(a[i]);
    printf("%lld\n", ans);
}
int main() {
    int T;
    scanf("%d", &T);
    while (T--) work();
    return 0;
}


A类功率放大器 在A类放大器中,导通角是完整的360°或100%的输入信号,而在其他类别的放大器中,晶体管在一个较小的导通角内导通。通过在输出级使用两个互补的晶体管,其中一个晶体管是NPN或N通道类型,而另一个晶体管是PNP或P通道(互补)类型,以所谓的 "推挽 "配置连接,可以获得比A类放大器更大的功率输出和效率。这种类型的电路效率很低(低于30%),而且对直流电源的消耗很大,输出的功率却很小。由于我们感兴趣的是向负载提供最大的交流功率,同时从电源中消耗尽可能少的直流电,所以我们主要关注的是放大器的 "转换效率"。 阅读详情

相关推荐

Hyper-V创建Ubuntu虚拟机设置固定IP

本文记录使用hyper-v创建ubuntu虚拟机,为虚拟设置固定IP且通过物理机可访问。

2623

hdu5687 Problem C度度熊的字典(Trie树)

Problem C Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 3643Accepted Submission(s): 964 Problem D...

一身清贫怎敢入繁华 525

QGIS v3.28 高效加载OSM在线地图的三种实用方法

本文详细介绍了在QGIS v3.28中高效加载OSM在线地图的三种实用方法:通过XYZ Tiles直接连接、使用QuickMapServices插件以及配置WMS/WTMS服务。针对每种方法提供了具体操作步骤、常见问题解决方案和性能优化建议,帮助用户根据需求选择最适合的方案,提升GIS工作效率。

weixin_29233333的博客 434

hdu多校(三)1004 Tokitsukaze and Multiple(easydp)

1004 Tokitsukaze and Multiple 题意:给定序列ana_nan​,数字ppp。需要把数列分段,问段内和是p的倍数的最大个数。 思路:题意就已经换了一下了,原题这样: 问题就转换成了数列分段,有dp味道了。因为题目要求连续。8错8错,前缀和来了。 用dp记录当前位置iii的最大个数,问题就在从啥状态转移来?好像可以随便转移,但是有贡献的位置jjj必然是∑k=jiai%p=0\sum_{k=j}^i a_i\%p=0∑k=ji​ai​%p=0的地方。 现在剩下的问题就是要找这个位置

手扶拖拉机如何改装四驱 240

高通平台power_supply 框架下添加第三方充电IC的驱动方法

1.power_supply电源框架介绍: power supply framework在kernel/drivers/power/下。内核抽象出来power supply子系统为驱动提供了统一的框架。 功能包括: 1.抽象PSY设备的共性,向用户空间提供统一的API; 2.为底层PSY驱动的编写,提供简单、统一的方式,同时封装并实现公共逻辑。 power supply class位于d...

Change 1万+

Unity动态创建Avatar骨骼映射

Unity Avatar骨骼映射动态创建,适配Unity通用动画,无需经过第三方建模软件,可运行时创建

Nbin_Newby的博客 1万+

hdu6059 Kanade's trio(字典树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6059 题意: 给你一组数,让你在其中找到多少个三元组,ai,aj,ak满足ai^aj 解: 我们需要判定ai^aj 那么我们利用字典树进行储存数据,然后记录每个数的相同的位数以及最高不同位,进行每位不相同出现的次数。 代码: #include #include #include #

no2015214099的博客 502

电工识图入门:从电气符号到控制逻辑的完整指南

电工图纸是电气工程领域的通用语言,无论是设备安装、线路检修还是系统设计,看不懂图纸就像航海没有海图。很多初学者面对复杂的电气符号和线路走向感到无从下手,实际上只要掌握正确的识图方法,就能从简单的照明电路逐步过渡到复杂的自动化控制系统。 本文将从最基础的电气符号和图纸类型讲起,通过实际图纸案例解析,带你建立完整的识图逻辑。你将学会如何区分主回路和控制回路,如何追踪电流路径,以及如何结合图纸进行故障排查。无论你是电工新手、设备维护人员还是相关专业学生,这套方法都能帮你快速提升图纸理解能力。 1. 电气图纸基础:

chengyixian7877的博客 337

HDU6059 Kanade's trio (Trie)

HDU6059 Kanade’s trio (Trie)题目描述求有多少三元组满足(i<j<k)and((A[i]xorA[j])<(A[j]xorA[k]))(i<j<k) and ((A[i] xor A[j])<(A[j] xor A[k]))题目分析读题一分钟,思考十五分钟。 根据时间猜测是O(nlogn)的算法。那么可能是枚举+二分,或者枚举+Trie。 有位运算的特点确定Trie是一

SidneyBill的博客 362

传感器采集信息的频率(采样频率)

较高的采集频率通常能提供更详细的信息,但也会增加数据处理和存储的负担。在某些应用中,较高的采样频率可能是必要的,而在其他情况下,则可能会选择适当的低采样频率以降低功耗和数据处理压力。传感器采集信息的频率(采样频率)是指传感器在一定时间内对输入信号进行采样的次数。对于一些需要快速检测和响应的应用,如运动传感器、声音传感器等,高采样频率是至关重要的。高采样频率通常需要更多的功耗和更大的存储容量,因为产生的数据量更大。例如,对于快速运动的对象,较低的采样频率可能无法捕捉到运动的真实轨迹。

chen的博客 5345

MTK(基础篇)ROM烧录以及分区的作用

本文介绍了MTK芯片设备的刷机流程及关键分区功能。首先通过MTK烧录工具加载ROM文件(包括引导文件和分区表),重点解析了各分区的核心作用:preloader类似BIOS负责硬件初始化;lk作为二级引导程序加载内核;vbmeta验证系统完整性;boot包含Linux内核;dtbo调整硬件配置;modem管理通信功能;tee保护生物识别数据;system/vendor分别存放系统核心和硬件驱动。特别指出preloader、vbmeta等关键分区损坏会导致设备变砖,而recovery分区是重要的救砖入口。全文简

weixin_49303682的博客 444

hdu 6059 Kanade's trio

给一个序列 An,问有多少个有序数对(i, j, k),满足:i < j < k;Ai xor Aj < Aj xor Ak

iTom's blog 888

置顶必读(1) | 《YOLOv26实战:从入门到深度优化》专栏导读与完整目录导航(持续更新中)

🏆 本文收录于 《YOLOv26实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现 YOLOv26 官方特性、核心改进、多任务支持、部署优化与行业落地,内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么用”,更讲“为什么这样设计、如何真正落地到项目中”。

**My Coding Family** 9万+

HDU 6059 Kanade's trio Trie + 计数

传送门:HDU6059 题意:给定一个序列a,求有多少个三元组(i,j,k) 满足1 思路: 利用字典树维护前 k-1 个数。当前处理第 k 个数。 显然对于 k 与 i 的最高不相同位 kp 与 ip : 当 ip=0 , kp=1 时,该最高不相同位之前的 ihigher=khigher 。则 jhigher 可以为任意数,均不对 i, k 更高位(指最高不相同位

WA是一笔财富 339

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

HDU 6059 01字典树

题目链接思路: 好题!对于这类题,一个通用的切入口是枚举一个量,然后丢到01字典树里去匹配。此题做法不止一种,可以枚举a[j]a[j],然后1−(j−1)1-(j-1)建立一棵前缀字典树,(j+1)−n(j+1)-n 建立一棵后缀字典树,然后分情况匹配即可。但个人认为最简单和最容易理解的还是枚举a[k]a[k],因为i<j<ki<j<k,故可以将1−(k−1)1-(k-1) 的数丢进字典树,然后用

新熊君的博客 498

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

2017多校第二场 HDU 6052 To my boyfriend 思维,计数题

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6040题意:给了一个生成的数列,给了m个查询,每次查第x大的数。解法:数据结构?听说可以分块。给队友说了这题,他掏出快排秒了。首先这道题的弱化版就是如何利用快拍查询序列第K大,那就是快拍的时候二分往左右走就可以了。这里查询m个数怎么办呢?我们m个数离线下来,并且排序,类似于一个数那样去做。然后这里就是二分

I good vegetable a! 543

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

HDU6059 01字典树

题解:   参考大佬的思路和代码,悟出一些自己不懂的东西。  很多异或题都有可能用到01字典树,因为它的时间复杂度为O(nlogAi). 我们先了解一下数组,比如用cnt[30][2]来表示已插入字典树中的数字中每一位的0/1有多少个,num[]数组表示的是第k个数的每一位。  我们先将a[]数组里的数逐个变成二进制倒放进去字典树中并遍历a[k],从高位到低位查找字典树里面第一个与a[k]的第x位...

Start_to_crazy的博客 383

Trie树(字典树)从懵逼到入门

//字典树是个好东西...也是个比较基础的东西,最近经常用到所以写个总结给自己看看...顺便分享一下求大佬指教 定义:Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。

jnxxhzz的博客 2万+

2017多校六 1002题 hdu 6097 Mindis 相似三角形 计算几何

题目链接 题意: 圆心 O 坐标(0, 0), 给定两点 P, Q(不在圆外),满足 PO = QO, 要在圆上找一点 D,使得 PD + QD 取到最小值。 官方题解: 做P点关于圆的反演点P',OPD与ODP'相似,相似比是|OP| : r。 Q点同理。 极小化PD+QD可以转化为极小化P'D+Q'D。 当P'Q'与圆有交点时,答案为两点距离

kkkkahlua的博客 1668

2017多校联合第三场 1005题 hdu 6060 RXD and dividing (超详细!!!)构造

题目链接 题意: 给定一棵 n 个节点的树,1 为根。现要将节点 2 ~ n 划分为 k 块,使得每一块与 根节点 形成的最小斯坦纳树的 边权值 总和最大。 看了题解之后的思考: 题解是:记有向边 (u, v) 长度为 w[v],以点 v 为根的子树的节点总数为 sz[v],那么答案就是 w[v] * min(sz[v], k) 对每个点求个和。 题解的说法是:可以通过构

kkkkahlua的博客 1071

HDU 3336 Count the string 所有前缀在串中的出现总次数

题目链接题意给定一个串 SS,求其所有前缀在其中的出现次数的总和。思路考虑 failfail 数组,fail[i]=jfail[i] = j 的含义是 S[0..j−1]==S[i−j..i−1]S[0..j-1] == S[i-j..i-1].记 dp[i]dp[i] 为以 ii 结尾的串中与前缀相同的串的个数。由 fail[i]=jfail[i] = j 有 S[0..j−1]==S[i−j..

kkkkahlua的博客 996

2017多校联合第二场 1009题 hdu 6053 TrickGCD (超详细!!!)莫比乌斯 容斥

题目链接 题意: Problem Description You are given an array A , and Zhu wants to know there are how many different array B satisfy the following conditions? * 1≤Bi≤Ai * For each pair( l ,

kkkkahlua的博客 898

2017多校八 1002题 hdu 6134 Battlestation Operational 艾弗森约定 莫比乌斯函数 分块

题目链接 题意: Your should calculate the total damage to the battlefield. Formally, you should compute f(n)=∑i=1n∑j=1i⌈ij⌉[(i,j)=1], where [(i,j)=1] evaluates to be 1 if gcd(i,j)=1,

kkkkahlua的博客 832

2017多校联合第一场 1006题 hdu 6038 Function 循环节

题目链接 题意: Please calculate the quantity of different functions f satisfying that f(i)=bf(ai) for each i from 0 to n−1. (嗯...就是这样) 思路: 首先可以将 a 数组划分成若干个循环节,每个节是相互独立的,取其中一个节来看,令其长度为 l

kkkkahlua的博客 805

2017多校四 1003题 hdu 6069 Counting Divisors 分解质因数

题目链接 参考:http://blog.youkuaiyun.com/protecteyesight/article/details/76685920  ——protecteyesight 题意: Problem Description In mathematics, the function d(n) denotes the number of divisors o

kkkkahlua的博客 689

2017多校九 05题 hdu 6165 FFF at Valentine 缩点 dp找最长链/拓扑排序

题目链接题意判定一个图是不是单向连通图。 // 其实就是poj 2186,不过poj的那道题数据水了些= = // 浏览题目时看成了FFT at Valentine吓死我= =思路先套路一发,tarjan求强联通分量,缩点,至此预处理完成。(这部分详细内容烦请移步本菜另一篇 强联通分量 缩点 tarjan 入门题小集) 然后怎么处理呢?法一现在我们得到了一个DAGDAG,直观想法就是有没有

kkkkahlua的博客 668
上一篇: 2017多校四 1007题 hdu 6073 Matching In Multiplication 拓扑排序 + 找环
下一篇: 2017多校一 1008题 hdu 6040 Hints of sd0061 排序 STL nth_element
kkkkahlua
博客等级 码龄12年 4粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值