首页 技术 正文
技术 2022年11月10日
0 收藏 587 点赞 4,537 浏览 1658 个字

【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=3809

【题目大意】

  给定一个长度为n(1<=n<=100000)的正整数序列s(1<=si<=n),
  对于m(1<=m<=1000000)次询问“l,r,a,b”,
  每次输出sl…sr中,权值∈[a,b]的权值的种类数。

【题解】

  用莫队维护,对于修改操作用树状数组,
  发现复杂度为O(msqrtnlogn),难以接受,
  考虑用分块处理整数序列,修改操作O(1),查询操作O(sqrt(n))
  总复杂度O(msqrt(n)+mlog(m))

【代码】

#include <cstdio>
#include <algorithm>
#include <cmath>
const int N=100001,M=1000001;
using namespace std;
typedef long long LL;
int size[N],ans[M],pos[N],color[N],c[400],n,m,limit,bl[400],br[400];
struct Q{
int l,r,id,a,b;
friend bool operator < (const Q &a,const Q &b){
return pos[a.l]<pos[b.l]||(pos[a.l]==pos[b.l]&&a.r<b.r);
}
}ask[M];
bool cmp(const Q &a,const Q &b){return a.id<b.id;}
void read(int&a){
char ch;while(!((ch=getchar())>='0')&&(ch<='9'));
a=ch-'0';while(((ch=getchar())>='0')&&(ch<='9'))a*=10,a+=ch-'0';
}
int query(int x,int y){
int res=0;
int L=pos[x],R=pos[y];
for(int i=L+1;i<R;i++)res+=c[i];
if(L==R){for(int i=x;i<=y;i++)if(size[i])res++;}
else{
for(int i=x;i<=br[L];i++)if(size[i])res++;
for(int i=bl[R];i<=y;i++)if(size[i])res++;
}return res;
}
void modify(int u,int x){
if(size[color[u]]==1&&x==-1)c[pos[color[u]]]--;
if(size[color[u]]==0&&x==1)c[pos[color[u]]]++;
size[color[u]]+=x;
}
int main(){
read(n);read(m);
limit=(int)sqrt(n+0.5);
for(int i=1;i<=n;i++){read(color[i]);pos[i]=(i-1)/limit+1;}
for(int i=1;i<=n;i++){br[pos[i]]=i;if(!bl[pos[i]])bl[pos[i]]=i;}
for(int i=1;i<=m;i++){read(ask[i].l);read(ask[i].r);read(ask[i].a);read(ask[i].b);ask[i].id=i;}
sort(ask+1,ask+m+1);
for(int i=1,l=1,r=0;i<=m;i++){
while(r<ask[i].r)modify(++r,1);
while(r>ask[i].r)modify(r--,-1);
while(l<ask[i].l)modify(l++,-1);
while(l>ask[i].l)modify(--l,1);
ans[ask[i].id]=query(ask[i].a,ask[i].b);
}for(int i=1;i<=m;i++)printf("%d\n",ans[i]);
return 0;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,489
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,904
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,490
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,290