二维偏序 三维偏序//CDQ分治//(基于时间的分治)

本文总结了二维偏序在竞赛编程中的应用,通过Codeforces 703D, 301D 和 bzoj 1935等题目,阐述如何利用树状数组和前缀和解决区间计数问题。同时,介绍了CDQ分治(三维偏序)的适用条件、性质和使用步骤,并提供了bzoj 3262和1176题目的三维偏序解决方案。" 125867736,11040343,微信小程序时间日期组件与筛选功能实现,"['微信小程序', '小程序', '前端开发']
摘要由CSDN通过智能技术生成

二维偏序

多校和网络赛多次越到这种题目,所以把这类题目都放到一起总结一下;

这类题目主要是求区间l到r中。。。的数量。用了树状数组,肯定是利用前缀和的思想来解决问题;

Codeforces 703D Mishka and Interesting sum

题意:给n个数,q个询问,每次询问求区间出现次数为偶数次的数的异或和

思路:用前缀和思想很容易想到 答案=区间出现的不同的数的异或和^区间出现奇数次的数异或和(出现偶数次不好求,那么就间接求) 出现奇数次很容易求,维护一个前缀异或和就行了,求区间不同数异或和主席树,树状数组都可以做;

Codeforces 301D Yaroslav and Divisors

题意:给一个n个数的排列,q个区间查询,输出每个区间a%b==0的a,b对数,a可以等于b;

思路:第一次想到的是莫队 算了一下时间复杂度 n*sqrt(n)*log(n) 卡不过去,正解是用数状数组+排序+乱搞;

我们要求区间l,r的a%b==0的数量 那么可以用sum[r]-sum[l-1],sum[r]表示从1到r中a%b==0的数量;那么就会出现少减的情况;

既a出现在l到r中, b出现在1到l-1中(假设这种情况为情况1)  或者a出现在1到l-1中,b出现在l到r中(情况二)

那么ans=sum[r]-sum[l-1]-情况1-情况2;我们将询问用二个数组(q1,q2)存起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值