different intergers

题意:给出n个整数的序列a(1≤ai≤n)和q个询问(1≤n,q≤1e5),每个询问包含两个整数L和R(1≤L,R≤n)。
对于每个询问,输出a[1...L]和a[R...n]的不同数字的个数。

这道题有两种写法:莫队/树状数组

这是莫队的模板题,这里不多讲(然而在学习莫队之前搞定这个难于上青天)

树状数组的做法是:

把区间【1,n】延长到【1,2n】

这样就把不连续的两个区间化成一个整区间,加入需要查询的是整区间【l,r】,

可以通过预处理将这个区间与前面的区间不同的中暑求出,而【l,r】区间与【1,l)区间相同的种数可以通过树状数组维护;

这是一个相对玄学的树状数组,真的,只是我有史以来做过的树状数组最神奇的题。

将查询离线然后对左端点进行排序,用一个nex【】数组记录下一个下标的当前值的位置;

左值不断右移(即不断接近查询的左端点)然后将nex【】放到树状数组里面的位置里去,这样就很神奇的能都维护【1,l)和【l,r】同时出现过的数了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值