BZOJ 3809 莫队+(分块|BIT)
- #include <cstdio>
- #include <iostream>
- #include <cstring>
- #include <algorithm>
- #include <queue>
- #include <vector>
- #include <cmath>
- #define pa pair<int,int>
- #define mp make_pair
- #define fi first
- #define se second
- #define pb push_back
- using namespace std;
- inline void Get_Int(int &x)
- {
- x=; char ch=getchar(); int f=;
- while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
- while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();} x*=f;
- }
- inline void Put_Int(int x)
- {
- char ch[]; int top=;
- if (x==) ch[++top]='';
- while (x) ch[++top]=x%+'',x/=;
- while (top) putchar(ch[top--]); putchar('\n');
- }
- //===================================================
- const int Maxn=;
- const int Maxm=;
- struct Node{int l,r,u,v,id;}q[Maxm];
- int n,m,s[Maxn],Block,Ans[Maxm],b[Maxn],B[Maxn];//Ans开Maxm
- inline int Get(int x) {return (x-)/Block+;}
- inline int Query(int x,int y)
- {
- int l=Get(x),r=Get(y),ret=;
- if (l==r)
- {
- for (int i=x;i<=y;i++) if (b[i]) ret++;
- return ret;
- }
- for (int i=l+;i<r;i++) ret+=B[i];
- for (int i=x;Get(i)==l;i++) if (b[i]) ret++;
- for (int i=y;Get(i)==r;i--) if (b[i]) ret++;
- return ret;
- }
- inline bool cmp(Node A,Node B)
- {
- if (Get(A.l)==Get(B.l)) return A.r<B.r;
- return Get(A.l)<Get(B.l);
- }
- inline void Del(int x)
- {if (b[s[x]]==) B[Get(s[x])]--; b[s[x]]--;}
- inline void Add(int x)
- {if (b[s[x]]==) B[Get(s[x])]++; b[s[x]]++;}
- int main()
- {
- Get_Int(n),Get_Int(m); Block=(int)sqrt(n);
- for (int i=;i<=n;i++) Get_Int(s[i]);
- for (int i=;i<=m;i++)
- Get_Int(q[i].l),Get_Int(q[i].r),Get_Int(q[i].u),Get_Int(q[i].v),q[i].id=i;
- memset(b,,sizeof(b));
- memset(B,,sizeof(B));
- sort(q+,q+m+,cmp);
- int L=,R=;
- for (int i=;i<=m;i++)
- {
- while (R<q[i].r) R++,Add(R);
- while (L>q[i].l) L--,Add(L);
- while (L<q[i].l) Del(L),L++;
- while (R>q[i].r) Del(R),R--;
- Ans[q[i].id]=Query(q[i].u,q[i].v);
- }
- for (int i=;i<=m;i++) Put_Int(Ans[i]);
- return ;
- }
分块 40s
- #include <cstdio>
- #include <iostream>
- #include <cstring>
- #include <algorithm>
- #include <queue>
- #include <vector>
- #include <cmath>
- #define pa pair<int,int>
- #define mp make_pair
- #define fi first
- #define se second
- #define pb push_back
- using namespace std;
- inline void Get_Int(int &x)
- {
- x=; char ch=getchar(); int f=;
- while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
- while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();} x*=f;
- }
- inline void Put_Int(int x)
- {
- char ch[]; int top=;
- if (x==) ch[++top]='';
- while (x) ch[++top]=x%+'',x/=;
- while (top) putchar(ch[top--]); putchar('\n');
- }
- //===================================================
- const int Maxn=;
- const int Maxm=;
- struct Node{int l,r,u,v,id;}q[Maxm];
- int c[Maxn],n,m,s[Maxn],Block,Ans[Maxm],b[Maxn];//Ans开Maxm
- inline int lowbit(int x) {return x&(-x);}
- inline int Query(int x)
- {int ret=; for (int i=x;i;i-=lowbit(i)) ret+=c[i];return ret;}
- inline void Modify(int x,int v)
- {for (int i=x;i<=n;i+=lowbit(i)) c[i]+=v;}
- inline int Get(int x) {return (x-)/Block+;}
- inline bool cmp(Node A,Node B)
- {
- if (Get(A.l)==Get(B.l)) return A.r<B.r;
- return Get(A.l)<Get(B.l);
- }
- inline void Del(int x)
- {if (b[s[x]]==) Modify(s[x],-);b[s[x]]--;}
- inline void Add(int x)
- {if (b[s[x]]==) Modify(s[x],); b[s[x]]++;}
- int main()
- {
- Get_Int(n),Get_Int(m); Block=(int)sqrt(n/);
- for (int i=;i<=n;i++) Get_Int(s[i]);
- for (int i=;i<=m;i++)
- Get_Int(q[i].l),Get_Int(q[i].r),Get_Int(q[i].u),Get_Int(q[i].v),q[i].id=i;
- memset(b,,sizeof(b));
- memset(c,,sizeof(c));
- sort(q+,q+m+,cmp);
- int L=,R=;
- for (int i=;i<=m;i++)
- {
- while (R<q[i].r) R++,Add(R);
- while (L>q[i].l) L--,Add(L);
- while (L<q[i].l) Del(L),L++;
- while (R>q[i].r) Del(R),R--;
- Ans[q[i].id]=Query(q[i].v)-Query(q[i].u-);
- }
- for (int i=;i<=m;i++) Put_Int(Ans[i]);
- return ;
- }
BIT 77s
对权值分块复杂度更优.
BZOJ 3809 莫队+(分块|BIT)的更多相关文章
- bzoj 3809 莫队
收获: 1.分块时顺便记录每个位置所属的块,然后一次排序就OK了. 2.要权衡在“区间移动”与“查询结果”之间的时间,莫队算法一般区间移动频率远大于查询结果,所以我们选择的辅助数据结构时就要注意了,我 ...
- 莫队+分块 BZOJ 3809
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1634 Solved: 482[Submit][Status][Di ...
- [BZOJ 3585] mex 【莫队+分块】
题目链接:BZOJ - 3585 题目分析 区间mex,即区间中没有出现的最小自然数. 那么我们使用一种莫队+分块的做法,使用莫队维护当前区间的每个数字的出现次数. 然后求mex用分块,将权值分块(显 ...
- Bzoj 3236: [Ahoi2013]作业 莫队,分块
3236: [Ahoi2013]作业 Time Limit: 100 Sec Memory Limit: 512 MBSubmit: 1113 Solved: 428[Submit][Status ...
- BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块
BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块 Description Autumn和Bakser又在研究Gty的妹子序列了 ...
- BZOJ_3585_mex && BZOJ_3339_Rmq Problem_莫队+分块
BZOJ_3585_mex && BZOJ_3339_Rmq Problem_莫队+分块 Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一 ...
- 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 ...
- CFGym101138D Strange Queries 莫队/分块
正解:莫队/分块 解题报告: 传送门 ummm这题耗了我一天差不多然后我到现在还没做完:D 而同机房的大佬用了一个小时没有就切了?大概这就是大佬和弱鸡的差距趴QAQ 然后只是大概写下思想好了因为代码我 ...
- [BZOJ3585]mex(莫队+分块)
显然可以离线主席树,这里用莫队+分块做.分块的一个重要思想是实现修改与查询时间复杂度的均衡,这里莫队和分块互相弥补. 考虑暴力的分块做法,首先显然大于n的数直接忽略,于是将值域分成sqrt(n)份,每 ...
随机推荐
- java 中继承,组合,重载,重写的实现原理 (转)
我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似 ...
- python(二)数据类型
一.整数 创建方法 i = 10 i = int(10) i = int("10",base=2) #“”中是几进制的表示,base是选择要表示的进制,如base=2,用2进制的 ...
- easyui combobox 带 checkbox
$('#cc').combobox({ url:'combobox_data1.json', method:'get', valueField:'id', textField:'text', pane ...
- Flowplayer-Embedding
SOURCE URL:https://flowplayer.org/docs/embedding.html Embedding Video embedding is an act where the ...
- 解决打开CHM文件后,右侧空白
在网上下了一个chm的文件,打开后只有目录,右侧不显示内容. 不知道是文件有问题,还是系统有问题. <ignore_js_op> 右键点击文件–属性 看到 最下面有一个提示 说是这个文件是 ...
- spinner下拉框组件
方法一代码如下: <string-array name="city_name"> <item>浙江</item> <item>上海& ...
- HDU-4522 湫湫系列故事——过年回家 最短路
题意:很乱 分析:把数据处理下,dijkstra下就行了,floyd超时了,我还想着优化一下输入,因为使用了vector和string等等,但是计算数据规模后,处理输入的时间复杂度比floyd要低一个 ...
- Linux 监控文件被什么进程修改
安装: apt-get install auditd. auditd 是后台守护进程,负责监控记录 auditctl 配置规则的工具 auditsearch 搜索查看 aureport 根据监控记录生 ...
- Cube Mapping
Cube map技术说到底就是用一个虚拟的立方体(cube)包围住物体,眼睛到物体某处的向量eyevec经过反射(以该处的法线为对称轴),反射向量reflectvec射到立方体上,就在该立方体上获得一 ...
- CBUUID UUIDString unrecognized selector sent to instance 错误
CBUUID UUIDString unrecognized selector sent to instance 错误 ios7.0,4s 蓝牙出现上述错误! 查看api可知,错误原因,由于CBUUI ...