Gty的二逼妹子序列 bzoj-3809

题目大意:给定一个n个正整数的序列,m次询问。每次询问一个区间$l_i$到$r_i$中,权值在$a_i$到$b_i$之间的数有多少个。

注释:$1\le n\le 10^5$,$1\le m\le 10^6$。


想法:说实话没想到分块和莫队。

考虑莫队如何处理旁区间:我们将值域分块。

每个块就存一下当前区间在这个块内有多少个值。特殊的是这个不是随时维护答案,是在区间刚好等于询问区间的时候处理。

莫队的时间复杂度是$O(n\sqrt{m})$;另外每次询问的时间复杂度是$O(\sqrt{n})$。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 100001
using namespace std;
int n,m,c[N],blg[N],L[1050],R[1050],unit,t,ansblo[1050],h[N],ans[N*10];
inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
int rd() {int x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=nc(); return x;}
struct Node
{
int l,r,a,b,id;
}q[N*10];
bool cmp(const Node &x,const Node &y)
{
if(blg[x.l]!=blg[y.l]) return x.l<y.l;
return x.r<y.r;
}
int query(int l,int r)
{
int p=blg[l],q=blg[r],ans=0,i;
if(p==q)
{
for(i=l;i<=r;i++) if(h[i]) ans++;
return ans;
}
for(i=p+1;i<q;i++) ans+=ansblo[i];
for(i=l;i<=R[p];i++) if(h[i]) ans++;
for(i=L[q];i<=r;i++) if(h[i]) ans++;
return ans;
}
void del(int x)
{
h[x]--;
if(h[x]==0) ansblo[blg[x]]--;
}
void add(int x)
{
h[x]++;
if(h[x]==1) ansblo[blg[x]]++;
}
int main()
{
n=rd(); m=rd();
int i,j,unit=sqrt(n);
t=n/unit;
for(i=1;i<=t;i++)
{
L[i]=R[i-1]+1; R[i]=unit*i;
for(j=L[i];j<=R[i];j++)
{
c[j]=rd(); blg[j]=i;
}
}
if(R[t]!=n)
{
t++; L[t]=R[t-1]+1; R[t]=n;
for(i=L[t];i<=n;i++)
{
c[i]=rd(); blg[i]=t;
}
}
for(i=1;i<=m;i++)
{
q[i].l=rd(); q[i].r=rd(); q[i].a=rd(); q[i].b=rd();
q[i].id=i;
}
sort(q+1,q+m+1,cmp);
int l=1,r=0;
for(i=1;i<=m;i++)
{
while(l<q[i].l) del(c[l]),l++;
while(r>q[i].r) del(c[r]),r--;
while(l>q[i].l) l--,add(c[l]);
while(r<q[i].r) r++,add(c[r]);
ans[q[i].id]=query(q[i].a,q[i].b);
}
for(i=1;i<=m;i++) printf("%d\n",ans[i]);
return 0;
}

小结:莫队真可爱... ...

[bzoj3809]Gty的二逼妹子序列_莫队_分块的更多相关文章

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

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

  2. 【BZOJ 3809】 3809: Gty的二逼妹子序列 (莫队+分块)

    3809: Gty的二逼妹子序列 Time Limit: 80 Sec  Memory Limit: 28 MBSubmit: 1728  Solved: 513 Description Autumn ...

  3. BZOJ 3809 Gty的二逼妹子序列(莫队+分块)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3809 [题目大意] 给定一个长度为n(1<=n<=100000)的正整数序 ...

  4. bzoj 3809 Gty的二逼妹子序列(莫队算法,块状链表)

    [题意] 回答若干个询问,(l,r,a,b):区间[l,r]内权值在[a,b]的数有多少[种]. [思路] 考虑使用块状链表实现莫队算法中的插入与删除. 因为权值处于1..n之间,所以我们可以建一个基 ...

  5. 洛谷P4867 Gty的二逼妹子序列(莫队+树状数组)

    传送门 本来打算用主席树 然后发现没办法维护颜色数 于是用了莫队加树状数组 然后竟然A了…… //minamoto #include<iostream> #include<cstdi ...

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

    [bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业 bzoj   bzoj 题目大意:一个序列,m个询问在$[l,r]$区间的$[x,y]$范围内的数的个数/种类. ...

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

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

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

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

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

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

随机推荐

  1. 如何在Ubuntu上安装Wine 2.6

    Wine(Wine不是模拟器)是一种开源兼容层软件应用程序,可以让Linux和Unix用户通过Winelib软件库在他们的系统上运行Windows软件. sudo add-apt-repository ...

  2. hdu5926Mr. Frog’s Game

    Mr. Frog's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  3. LPS HDOJ 4745 Two Rabbits

    题目传送门 /* 题意:一只兔子顺时针跳,另一只逆时针跳,跳石头权值相等而且不能越过起点 LPS:这道就是LPS的应用,把环倍增成链,套一下LPS,然而并不能理解dp[i][i+n-2] + 1,看别 ...

  4. 题解报告:hdu 1035 Robot Motion(简单搜索一遍)

    Problem Description A robot has been programmed to follow the instructions in its path. Instructions ...

  5. Hbase源码分析:RPC概况

    RPC是hbase中Master,RegionServer和Client三者之间通信交流的纽带.了解hbase的rpc机制能够为通过源码学习hbase奠定良好的基础.因为了解了hbase的rpc机制能 ...

  6. A Python example for HiveServer2

    要做一个通过调用python来实现对hive server2 的连接.在网上搜索了很多资料,有些说的hive sever的,但是由于认证方式发生改变,行不通. 最后,找到了权威的说明(PS: 还是应该 ...

  7. 【hive】hive表很大的时候查询报错问题

    线上hive使用环境出现了一个奇怪的问题,跑一段时间就报如下错误: FAILED: SemanticException MetaException(message:Exception thrown w ...

  8. jQuery伪分页效果

    如图,我们首先分析在一个页面存放4条内容,其余的超出隐藏(因为这里没有后台数据,所以我们把内容‘写死’),然后就是下面两个按钮(这里我们不用button,因为button有自带的提交功能),然后我们可 ...

  9. NodeJS、NPM安装配置步骤

    安装NodeJS和NPM 1.Node JS 官网下载地址 https://nodejs.org/en/download/ 2.安装完后,使用cmd 命令输入两个命令,查看安装状态 node -v n ...

  10. 2星|《约见投资人》:A股上市公司软文集

    约见资本人:58家上市公司创始人亲述创业之路 全书写了58个A股上市公司的故事,基本是宣传上市公司老总的软文.基本的套路是创始人历尽苦难创立了公司,取得了好业绩.最希望看的分析与数据几乎没有.看了一小 ...