题意:
给定一个长度为 nnn 的序列c,qc,qc,q 次询问,每次给出l,r,a,bl,r,a,bl,r,a,b求在[l,r][l,r][l,r]中有多少种不同的值 kkk 满足 k⊕a≤b​.k⊕a≤b​.k⊕a≤b​.

题解:
莫队+字典树
补题的时候看到了带佬新得一种写法,即把字典树当成一颗完全二叉树去跑,不需要新建结点编号。

在 Trie 上顺着 a⊕b 走 ,为什么要跟着a⊕b走呢?
因为顺着a⊕b走也就是,顺着a⊕字典树=b走 当b=1时,就可以把c⊕a=0加入答案
若 b 当前位是 1,则所有 k⊕a 在当前位是 0 的数字都符合要求
找出字典树中与a当前为相同得值 (让其⊕后为0)

当然树状数组上套一个字典树也是一个不错得选择,先对r进行排序,然后离线询问,老套路题了。

代码:

#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
#include<bits/stdc++.h>using namespace std;
const int maxn=1e5+10;struct Q{int l,r,k,a,b;
}pp[maxn];
int n,m,k;
int pos[maxn],a[maxn],cnt[maxn];
int sum[maxn*18],ans[maxn];
inline int read(){int f=1,x=0;char ch;do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');return x*f;
}struct rule{bool operator()(const Q & a,const Q & b)const{if(pos[a.l]!=pos[b.l]) return a.l<b.l;if(pos[a.l]&1) return a.r<b.r;return a.r>b.r;}
};void add(int x,int v){int node=1;sum[node]+=v;for(int i=17;i>=0;i--){node=(node<<1)+(x>>i&1);sum[node]+=v;}
}int query(int a,int b){int node=1,res=0;//cout<<"debug"<<endl;for(int i=17;i>=0;i--){  //在 Trie 上贴着 a^b 走  也就是说贴着a^字典树=b走 当b=1时,就可以把k^a=0加入答案int t=(a>>i&1)^(b>>i&1);//若 b 当前位是 1,则所有 k^a 在当前位是 0 的数字都符合要求if(b>>i&1) res+=sum[(node<<1)+(t^1)];//找出字典树中与a当前为相同得值 (让其^后为0)node=(node<<1)+t;}res+=sum[node];return res;
}int main() {//    ios::sync_with_stdio(false);
//    cin.tie(0);
//    cout.tie(0);n=read();int sz=sqrt(n);for(int i=1;i<=n;i++){a[i]=read();pos[i]=i/sz;}int q;q=read();for(int i=1;i<=q;i++){pp[i].l=read();pp[i].r=read();pp[i].a=read();pp[i].b=read();pp[i].k=i;}sort(pp+1,pp+1+q,rule());int l=1,r=0;for(int i=1;i<=q;i++){while(pp[i].l<l){l--;if(++cnt[a[l]]==1){add(a[l],1);}}while(pp[i].r>r){r++;if(++cnt[a[r]]==1){add(a[r],1);}}while(pp[i].l>l){if(--cnt[a[l]]==0){add(a[l],-1);}l++;}while(pp[i].r<r){if(--cnt[a[r]]==0){add(a[r],-1);}r--;}ans[pp[i].k]=query(pp[i].a,pp[i].b);}for(int i=1;i<=q;i++){printf("%d\n",ans[i]);}
}

HDU6964 I love counting (字典树+莫队)相关推荐

  1. 【CodeForces】700 D. Huffman Coding on Segment 哈夫曼树+莫队+分块

    [题目]D. Huffman Coding on Segment [题意]给定n个数字,m次询问区间[l,r]的数字的哈夫曼编码总长.1<=n,m,ai<=10^5. [算法]哈夫曼树+莫 ...

  2. 主席树 | 莫队 ---- Codeforces Round #716 (Div. 2) D. Cut and Stick [主席树or莫队优化] 区间众数问题(静态)

    题目链接 题目大意: 就是给你nnn个数,和q次询问,每次询问给你一个区间[l,r][l,r][l,r],问你把区间里面的数分配成最少多少块,使得块内出现最多次数的数不超过区间长度的一半(除不尽向上取 ...

  3. [HNOI2016] 序列(线段树 + 莫队 + 倍增)

    problem luogu-P3246 心路历程+卡常历程+问题存疑 一直在想莫队的做法.发现左右指针的移动对应一段左/右端点固定的子序列,然后可以一个数代表一段相同的贡献. 就开始求 lsti,nx ...

  4. P3180-[HAOI2016]地图【圆方树,莫队,分块】

    正题 题目链接:https://www.luogu.com.cn/problem/P3180 题目大意 nnn个点mmm条边的一个仙人掌,有点权. QQQ次询问给出op,x,yop,x,yop,x,y ...

  5. 牛客网多校联合训练1 J Different Integers(可持久化线段树/莫队)

    题意:给你一个L,R区间,让你求1-L和R-n中有多少个数 思路:最美不过夕阳红,一直没想到拼接起来,之前想到拼接,但想的是每次都进行拼接,所以是一个n2lg的操作,最后想到了拼接全部,然后就是一个经 ...

  6. bzoj4564: [Haoi2016]地图 仙人掌的圆方树 莫队 分块

    bzoj4564: [Haoi2016]地图 Description 一天rin来到了一个遥远的都市.这个都市有n个建筑,编号从1到n,其中市中心编号为1,这个都市有m条双向通 行的街道,每条街道连接 ...

  7. 根号类算法讲解——各(四)种莫队(填坑)

    这个坑终于填了- 上文接这里 莫队算法 这就是莫队(确信) 先放个可离线的题: 可离线:给你个序列,m次询问(可离线)一段区间有多少个不同的数(可离线)(数据范围 105 10 5 10^5)可离线 ...

  8. 莫队 ---- 值域分块处理优化字典树上的查询 杭电多校2021第二场1004 i love counting

    题目链接 题目大意: 就是给你nnn个数,mmm次询问 每次询问给你l,r,a,bl,r,a,bl,r,a,b问你在[l,r][l,r][l,r]区间里面有多少种种种数c(XOR)a≤bc(XOR)a ...

  9. Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组

    题目链接 题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k. 首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t ...

最新文章

  1. python爬虫能干什么-Python爬虫能做什么
  2. REST访问(RestTemplate)
  3. 深度学习和目标检测系列教程 1-300:什么是对象检测和常见的8 种基础目标检测算法
  4. 步进电机s型加减速计算工具_步进电机噪音和振动的原因分析及应对策略
  5. 利用.NET Core类库System.Reflection.DispatchProxy实现简易Aop
  6. windows 批处理自学教程 基础篇
  7. 【图像处理】图像强度变换、直方图均衡化(Image Intensity Transformations and Histogram Equalization)
  8. shell脚本 把一个文件的内容全部转换为大写
  9. 联想外接键盘fn热键取消
  10. HTML5 标签汇总
  11. 定积分求导例题_定积分典型例题
  12. python 隐含波动率_python - QuantLib XL隐含波动率 - 堆栈内存溢出
  13. 解决IE浏览器jQuery执行ajax不响应问题
  14. vue2.x进阶知识点总结
  15. oracle 执行计划中出现 merge join cartesian
  16. android一些可用实例2014收藏
  17. stm32f105移植到gd32f305笔记
  18. vue 折叠效果动画
  19. 钰泰ETA5070/ETA5071,1uA超低功耗和300mALDO,兼容RT9078
  20. 爬虫day6常见的反爬总结

热门文章

  1. 如何用数据结构解释计算机系统 常用数据结构
  2. idea 关于spring boot实现自动编译
  3. CSDN如何删除自己不用的分类(亲测有效!)
  4. 机器视觉工程师必须了解的基础知识
  5. 神器!3小时复现 Alexnet 和 word2vec!
  6. 汇总 | OpenCV4中的非典型深度学习模型
  7. python03-异常处理
  8. vue 结合 echarts
  9. 异构GoldenGate 12c 双向复制配置
  10. JSP HTML区别