bzoj   bzoj

题目大意:一个序列,m个询问在$[l,r]$区间的$[x,y]$范围内的数的个数/种类。

思路:

因为看不出来怎么做,所以考虑莫队。

太懒想写个树状数组但是$n\sqrt{n}log_{n}$太虚

所以将数分块,修改$O(1)$,查询$O(\sqrt{n})$

完结

  1 #include<algorithm>
  2 #include<cstdio>
  3 #include<cmath>
  4 using namespace std;
  5 const int N=114514,SN=366;
  6 template<typename tp>inline void read(tp &kk){
  7     tp ret=0,f=1;char ch=getchar();
  8     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  9     while(ch>='0'&&ch<='9'){ret=ret*10+ch-'0';ch=getchar();}
 10     kk=ret*f;
 11 }
 12 int n,m,a[N],bl[N],bs;
 13 struct ques
 14 {
 15     int l,r,x,y,id;
 16     bool operator < (const ques &a)const{return bl[l]==bl[a.l]?r<a.r:bl[l]<bl[a.l];}
 17     void init(int i){id=i;read(l),read(r),read(x),read(y);}
 18 }q[N];
 19
 20 struct ans
 21 {
 22     int a1,a2;
 23     ans(){a1=a2=0;}
 24 }prt[N];
 25
 26 struct ShangYang
 27 {
 28     int l[SN],r[SN],buk[SN],bukk[SN],b[N],po[N],sz;
 29     void start()
 30     {
 31         sz=ceil(sqrt(100000));
 32         int bb=0;
 33         for(int i=1;i<=n;i+=sz)
 34         {
 35             bb++;
 36             l[bb]=i;
 37             r[bb]=min(i+sz-1,n);
 38             for(int j=l[bb];j<=r[bb];j++) b[j]=bb;
 39         }
 40     }
 41     void add(int x)
 42     {
 43         if(!po[x]) bukk[b[x]]++;
 44         po[x]++;
 45         buk[b[x]]++;
 46     }
 47     void mus(int x)
 48     {
 49         po[x]--;
 50         buk[b[x]]--;
 51         if(!po[x]) bukk[b[x]]--;
 52     }
 53     ans query(int x,int y)
 54     {
 55         ans ret;
 56         int bx=b[x],by=b[y];
 57         if(bx==by)
 58         {
 59             for(int i=x;i<=y;i++)
 60                 ret.a1+=po[i],ret.a2+=(!!po[i]);
 61         }else
 62         {
 63             for(int i=bx+1;i<by;i++)
 64                 ret.a1+=buk[i],ret.a2+=bukk[i];
 65             for(int i=x;i<=r[bx];i++)
 66                 ret.a1+=po[i],ret.a2+=(!!po[i]);
 67             for(int i=l[by];i<=y;i++)
 68                 ret.a1+=po[i],ret.a2+=(!!po[i]);
 69         }
 70         return ret;
 71     }
 72 }sy;
 73
 74 void icu()
 75 {
 76     int l=1,r=0;
 77     for(int i=1;i<=m;i++)
 78     {
 79         while(r<q[i].r) sy.add(a[++r]);
 80         while(l>q[i].l) sy.add(a[--l]);
 81         while(r>q[i].r) sy.mus(a[r--]);
 82         while(l<q[i].l) sy.mus(a[l++]);
 83         prt[q[i].id]=sy.query(q[i].x,q[i].y);
 84     }
 85 }
 86
 87 int main()
 88 {
 89     read(n),read(m);
 90     bs=ceil(sqrt(n));
 91     for(int i=1;i<=n;i++) read(a[i]),bl[i]=(i-1)/bs+1;
 92     for(int i=1;i<=m;i++) q[i].init(i);
 93     // puts("114514");
 94     sy.start();
 95     sort(q+1,q+1+m);
 96     icu();
 97     // puts("1919810");
 98     for(int i=1;i<=m;i++) printf("%d %d\n",prt[i].a1,prt[i].a2);
 99     return 0;
100 }

View Code

转载于:https://www.cnblogs.com/rikurika/p/11252219.html

[bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业相关推荐

  1. BZOJ3809: Gty的二逼妹子序列

    BZOJ3809: Gty的二逼妹子序列 又是一道权限题... 本蒟蒻没钱氪金... 附上洛谷题面: 洛谷P4867 Gty的二逼妹子序列 题目描述 Autumn和Bakser又在研究Gty的妹子序列 ...

  2. [BZOJ3809]Gty的二逼妹子序列

    [BZOJ3809]Gty的二逼妹子序列 试题描述 Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽 ...

  3. 【bzoj3089】gty的二逼妹子序列

    一眼又是个莫队-- 首先看这时间/空间复杂度,线段树/主席树就别想了-- 然后么--zcy就有点傻了-- 于是zcy看了下hzwer,感觉受教育了. 分块的调块大小真是玄学设计. 有没有一种方法在修改 ...

  4. P4867-Gty的二逼妹子序列【平衡结合,莫队,分块】

    正题 题目链接:https://www.luogu.com.cn/problem/P4867 题目大意 一个序列要求支持询问一个区间[l,r][l,r][l,r]内在[a,b][a,b][a,b]之间 ...

  5. [BZOJ3236][Ahoi2013]作业(莫队+树状数组)

    此题的询问是一个位置和权值都有限制的二维区间,但是题目具备无修改和允许离线两个条件,可以用莫队算法解决. 一个想法是:用莫队维护位置,树状数组维护权值. 具体的说,用一个数组 cnt cnt,维护莫队 ...

  6. BZOJ3236 [Ahoi2013]作业

    昨天晚上做的...差错一直查到今天= = 最后没办法问管理员要了数据才知道原来ans数组开小了233,简直沙茶 这道题不就是裸的莫队嘛= =||| 只要用树状数组维护当前的两种个数即可. 1 /*** ...

  7. BZOJ3236[Ahoi2013]作业——莫队+树状数组/莫队+分块

    题目描述 输入 输出 样例输入 3 4 1 2 2 1 2 1 3 1 2 1 1 1 3 1 3 2 3 2 3 样例输出 2 2 1 1 3 2 2 1 提示 N=100000,M=1000000 ...

  8. Bzoj3236:[Ahoi2013]作业:莫队算法+树状数组

    题目链接:3236:[Ahoi2013]作业 这题-- 很水的一道莫队,只要用一个树状数组维护数值出现的前缀和就行就行 然而-- 可怜的我真是T得蛋疼了QAQ 先是写了一发裸莫队,T 卧槽T了? 快速 ...

  9. 【bzoj3744】Gty的妹子序列 分块+树状数组+主席树

    题目描述 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成 ...

  10. #BZOJ3744 GTY的妹子序列

    Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他 ...

最新文章

  1. 电子科技大学技术交流报道
  2. 参观 Google 总部是一种什么体验?
  3. 高清还原破损视频,参数和训练时间减少三分之二,台大这项研究登上了BMVC 2019...
  4. Go 语言编程 — 作用域
  5. 继承extends、super、this、方法重写overiding、final、代码块_DAY08
  6. Team Work(CF 932 E)[bzoj5093][Lydsy1711月赛]图的价值
  7. 项目测试基础:白盒测试相关知识笔记
  8. 第二次小组实践作业小组每日进度汇报:2017-11-29
  9. 有限域f9的特征是多少_第四章有限域1.ppt
  10. Win10 开机system进程占用CPU 20%,ACPI.sys hardware interrupt
  11. python进行图像识别与分类_使用机器学习模型快速进行图像分类识别
  12. 【学点心理学】八本值得反复阅读的心理类书籍推荐
  13. Linux学习之安装配置VM虚拟机
  14. word的页脚页码从9开始后面全是1,怎么解决?
  15. @Resource和@Autowired的区别
  16. ffmpeg超时设置
  17. layui 日期选择器 laydate详细参数用法大全,一键复制粘贴
  18. VS2022的下载和使用
  19. 钉钉企业微信集成免登录
  20. 自定义 PSPad 文本编辑器 编辑热键 By shawl.qiu

热门文章

  1. 服务器几种邮件报警设置之ESXI账号登陆报警[一]
  2. 19.浏览器Window服务($window)
  3. SD-WAN(软件定义WAN)
  4. 自动化CodeReview - ASP.NET Core请求参数验证
  5. IIS7.5配制支持PHP脚本错误代码0x80070002
  6. FTPOperater
  7. DirectX 发展历程
  8. BitHacks--位操作技巧
  9. 在主函数中输入10个等长的字符串。用另一函数对他们排序。
  10. 谈天津地铁之为民服务