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

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 }

[bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业的更多相关文章

  1. bzoj3809 Gty的二逼妹子序列 & bzoj3236 [Ahoi2013]作业 莫队+分块

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3809 https://lydsy.com/JudgeOnline/problem.php?id ...

  2. BZOJ 3809: Gty的二逼妹子序列 & 3236: [Ahoi2013]作业 [莫队]

    题意: 询问区间权值在$[a,b]$范围内种类数和个数 莫队 权值分块维护种类数和个数$O(1)-O(\sqrt{N})$ #include <iostream> #include < ...

  3. BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块

    BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块 Description Autumn和Bakser又在研究Gty的妹子序列了 ...

  4. [bzoj3809]Gty的二逼妹子序列_莫队_分块

    Gty的二逼妹子序列 bzoj-3809 题目大意:给定一个n个正整数的序列,m次询问.每次询问一个区间$l_i$到$r_i$中,权值在$a_i$到$b_i$之间的数有多少个. 注释:$1\le n\ ...

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

    Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题.   对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数.   为了方 ...

  6. [BZOJ3809]Gty的二逼妹子序列[莫队+分块]

    题意 给出长度为 \(n\) 的序列,\(m\) 次询问,每次给出 \(l,r,a,b\) ,表示询问区间 \([l,r]\) 中,权值在 \([a,b]\) 范围的数的种类数. \(n\leq 10 ...

  7. 2019.01.08 bzoj3809: Gty的二逼妹子序列(莫队+权值分块)

    传送门 题意:多组询问,问区间[l,r]中权值在[a,b]间的数的种类数. 看了一眼大家应该都知道要莫队了吧. 然后很容易想到用树状数组优化修改和查询做到O(mnlogamax)O(m\sqrt nl ...

  8. 【莫队算法】【权值分块】bzoj3809 Gty的二逼妹子序列

    如题. #include<cstdio> #include<algorithm> #include<cmath> using namespace std; int ...

  9. 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块

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

随机推荐

  1. Asp-Net-Core开发笔记:使用NPM和gulp管理前端静态文件

    前言 本文介绍的是AspNetCore的MVC项目,WebApi+独立前端这种前后端分离的项目就不需要多此一举了~默认前端小伙伴是懂得使用前端工具链的. 为啥要用MVC这种服务端渲染技术呢? 简单项目 ...

  2. NPM 错误、问题等汇总

    一. npm的作用就是对Node.js依赖的包进行管理,也可以理解为用来安装/卸载Node.js需要装的东西 二. 1. 修改npm配置为淘宝的源下载: npm install -g cnpm --r ...

  3. Spring 控制反转和依赖注入

    控制反转的类型 控制反转(IOC)旨在提供一种更简单的机制,来设置组件的依赖项,并在整个生命周期管理这些依赖项.通常,控制反转可以分成两种子类型:依赖注入(DI)和依赖查找(DL),这些子类型各自又可 ...

  4. 【论文考古】分布式优化 Communication Complexity of Convex Optimization

    J. N. Tsitsiklis and Z.-Q. Luo, "Communication complexity of convex optimization," Journal ...

  5. KALI搭建Docker+Vulhub漏洞复现环境

    在学习网络安全的过程中,少不了的就是做漏洞复现,而漏洞复现一般比较常用的方式就是使用docker-vulhub进行环境搭建,我近期也遇到了这个问题,但是网上的教程特别混乱,根本起不到帮助作用,即使有可 ...

  6. NFA转化为DFA

    NFA(不确定的有穷自动机)转化为DFA(确定的有穷自动机) NFA转换DFA,通常是将带空串的NFA(即:ε-NFA)先转化为不带空串的NFA(即:NFA),然后再转化为DFA. 提示:ε是空串的意 ...

  7. SPYEYE手机远程监控和官方SPYEYE间谍软件最新下载方式

    听起来远程控制手机好像很高级的样子,但是实现起来其实非常简单.实现原理如下: 运行程序,让程序不停地读取数据 用手机给手机发送邮件 判断是否读取到指定主题的手机,如果有,则获取手机内容 根据邮件内容, ...

  8. 【C#TAP 异步编程】构造函数 OOP

    原文:异步 OOP 2:构造函数 (stephencleary.com) 异步构造带来了一个有趣的问题.能够在构造函数中使用会很有用,但这意味着构造函数必须返回一个表示将来将构造的值,而不是构造的值. ...

  9. C# Control.BeginInvoke、synchronizationcontext.post、delegate.BeginInvoke的运行原理

    背景 用到的知识点 1.windows消息机制 备注:鼠标点击.键盘等事件产生的消息要放入系统消息队列,然后再分配到应用程序线程消息队列.软件PostMessage的消息直接进入应用程序线程消息队列, ...

  10. 论文解读(GIN)《How Powerful are Graph Neural Networks》

    Paper Information Title:<How Powerful are Graph Neural Networks?>Authors:Keyulu Xu, Weihua Hu, ...