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)份,每 ...
随机推荐
- 关于bootstrap
http://www.runoob.com/bootstrap/bootstrap-buttons.html file:///C:/LiuHuan/bc-bootstrap/bc-bootstrap/ ...
- [poj3378] Crazy Thairs (DP + 树状数组维护 + 高精度)
树状数组维护DP + 高精度 Description These days, Sempr is crazed on one problem named Crazy Thair. Given N (1 ...
- Linux sticky bit 目录权限 rwt权限
[linux权限分为 user group others三组] 今天看到有个目录的权限是rwxrwxrwt 很惊讶这个t是什么,怎么不是x或者-呢?搜了下发现: 这个t代表是所谓的sticky bit ...
- 使用R进行倾向得分匹配
pacman::p_load(knitr, wakefield, MatchIt, tableone, captioner)set.seed(1234)library(wakefield)df.pat ...
- 激活、复制、使用R/3标准数据源(RSA5、RSA6、RSA1)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- js判断鼠标进入以及离开容器的方向
(注:以下代码涉及到jQuery,建议前端大牛绕路~~~) 1.遇到的问题 如图当鼠标右箭头位置上下移动的时候 下面的城市列表容器不能隐藏. 2.方法: 网上搜了些前端大牛们的解决办法 ...
- VM安装mac及dmg文件转换iso
今天心血来潮,突然看见一篇关于swift的入门教程,但是前提是有一台mac啊,于是对于屌丝,就只好装黑苹果或者是虚拟机上运行了,但是呢mac貌似听说(没用过)只能在inter上运行,屌丝的本子偏偏是A ...
- CSS3 transform对普通元素的N多渲染影响
一.一入transform深似海 一个普普通通的元素,如果应用了CSS3 transform变换,即便这个transform属性值不会改变其任何表面的变化(如scale(1), translate(0 ...
- NGUI Camera's raycast hit through the UI Layer issue
Raycast into GUI?http://forum.unity3d.com/threads/raycast-into-gui.263397/ << ; Ray myray = UI ...
- postgresql - 事务
1.事务的使用 begin;//开启关闭自动提交的事务 insert into testtab01 values(0); rollback;//事务回滚 2.SavePoint的使用 begin;// ...