https://vjudge.net/problem/SPOJ-DQUERY

http://www.spoj.com/problems/DQUERY/en/

给定一列数,查询给定区间内数的种类数。

这题可以分块做:BZOJ2453:维护队列

但是我们不想分块而且垃圾SPOJ可能会卡时间同时又想练主席树,所以选择主席树。

参考:https://www.cnblogs.com/zhuanzhuruyi/p/5936713.html

这种题的主席树建法并不是权值线段树,而是正常线段树。

当我们建树过程中碰到的重复的数的时候,显然让该重复的数接近r是最好的,所以我们把前面的数删掉,放到后面。

查询的时候就是查询rt[0]~rt[r],并且查询的范围在l~r的数的个数即可。

PS:rt[0]相当于没有,范围的上限r也可以省略。

#include<stack>
#include<queue>
#include<cstdio>
#include<cstring>
#include<bitset>
#include<algorithm>
using namespace std;
const int N=1e6+;
inline int read(){
int x=,w=;char ch=;
while(ch<''||ch>''){if(ch=='-')w=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*w;
}
struct tree{
int l,r,sum;
}tr[N*];
int n,m,rt[N],pool,in[N];
inline void insert(int y,int &x,int l,int r,int p,int v){
tr[x=++pool]=tr[y];
tr[x].sum+=v;
if(l==r)return;
int mid=(l+r)>>;
if(p<=mid)insert(tr[y].l,tr[x].l,l,mid,p,v);
else insert(tr[y].r,tr[x].r,mid+,r,p,v);
}
inline int query(int x,int l,int r,int p){
if(p<=l)return tr[x].sum;
if(r<p)return ;
int mid=(l+r)>>;
return query(tr[x].l,l,mid,p)+query(tr[x].r,mid+,r,p);
}
int main(){
n=read();
for(int i=;i<=n;i++){
int a=read(),tmp;
if(!in[a]){
insert(rt[i-],rt[i],,n,in[a]=i,);
}else{
insert(rt[i-],tmp,,n,in[a],-);
insert(tmp,rt[i],,n,in[a]=i,);
}
}
m=read();
for(int i=;i<=m;i++){
int l=read(),r=read();
printf("%d\n",query(rt[r],,n,l));
}
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

SPOJ3267/DQUERY:D-query——题解的更多相关文章

  1. SPOJ3267 D-query 离线+树状数组 在线主席树

    分析:这个题,离线的话就是水题,如果强制在线,其实和离线一个思路,然后硬上主席树就行了 离线的代码 #include <iostream> #include <stdio.h> ...

  2. [SP3267]DQUERY - D query

    题目传送门 维护一个区间内不同数的个数,最直观的想法是直接排序后用树状数组维护即可.但是我们发现n只有3e4,于是我们想到了可以拿一个$O(n\sqrt{n})$的莫队维护.关于莫队算法如果有不知道的 ...

  3. 【HDU5869】 Different GCD Subarray Query 题解 (线段树维护区间GCD)

    题目大意:求区间$[L,R]$中所有子区间产生的最大公因数的个数. ------------------------- 对于$gcd$,我们知道$gcd(a,b,c)=gcd(gcd(a,b),c)$ ...

  4. BZOJ3236:[AHOI2013]作业——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3236 第一种做法: 建两棵主席树分别处理两个问题. 第一个问题水,第二个问题参考SPOJ3267/ ...

  5. 莫队算法学习笔记【BZOJ2038:小Z的袜子】【SPOJ3267:D-query】

    很久以前傻乎乎地看来源奇怪的资料的时候被各种曼哈顿弄晕了. 然后现在学会的是分块方法.另新创一个分块方法. 让我们考虑这样一个区间询问问题…… 它有如下的性质: 0,n个数,Q个询问. 1,它没有修改 ...

  6. SPOJ3267:D-query

    题面 SPOJ3267 Sol 给定\(N\)个正整数构成的序列,将对于指定的闭区间查询其区间内的不同的数的个数 主席树 不是权值线段树 维护位置 如果插入一个数时发现之前有过了 那么修改当前的,那个 ...

  7. 【题解】Luogu SP3267 DQUERY - D-query

    原题传送门 这题和Luogu P1972 [SDOI2009]HH的项链很像,只是数据大小有些差别,题解 我博客里对莫队的介绍 我们在排序询问时,普通是这样qaq inline bool cmp(re ...

  8. HDU3686 Traffic Real Time Query System 题解

    题目 City C is really a nightmare of all drivers for its traffic jams. To solve the traffic problem, t ...

  9. 【题解】【数组】【Prefix Sums】【Codility】Genomic Range Query

    A non-empty zero-indexed string S is given. String S consists of N characters from the set of upper- ...

随机推荐

  1. 「赛后补题」Meeting(HDU-5521)

    题意 A,B两个人分别在1和n区.每个区有若干点(区之间的点可以重复,各个区内点间的距离一致),给出区之间有联系的图以及到达所需时间.求两个人见面最短时间以及在哪个区碰面(可有多个) 分析 隐式图搜索 ...

  2. apache+php开发环境搭建步骤

    apache 卸载apache服务命令:sc delete apache 1.在D盘下面新建文件夹php7 2.解压apache到php7文件夹下面 3.修改配置文件 4.安装apache服务C:\w ...

  3. Siki_Unity_2-1_API常用方法和类详细讲解(下)

    Unity 2-1 API常用方法和类详细讲解(下) 任务101&102:射线检测 射线origin + direction:射线检测:射线是否碰撞到物体 (物体需要有碰撞器),碰撞物体的信息 ...

  4. Siki_Unity_1-2_Unity5.2入门课程_进入Unity开发的奇幻世界_Roll A Ball

    1-2 Unity5.2入门课程 进入Unity开发的奇幻世界 任务1:Roll A Ball项目简介 Unity官网的tutorial入门项目 方向键控制小球在平台上滚动,碰撞方块得分,消掉所有方块 ...

  5. Centos7添加静态路由

    本文摘取自 Centos7系统配置上的变化(二)网络管理基础 一.ip route显示和设定路由 1.显示路由表 [root@centos7 ~]# ip route show default via ...

  6. Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking---随笔

    Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking DCF跟踪算法因边界效应,鲁棒性较差.SRD ...

  7. C++读取文件统计单词个数及频率

    1.Github链接 GitHub链接地址https://github.com/Zzwenm/PersonProject-C2 2.PSP表格 PSP2.1 Personal Software Pro ...

  8. iOS开发改变字符串中指定字符颜色,大小等等

    NSString *strJTGZ = [NSString stringWithFormat:@"交通管制%d处 ",[jtgz intValue]]; NSMutableAttr ...

  9. 【转】bind简单示例

    bind简单示例代码 namespace { class placeholder_ {}; placeholder_ __1; } template <typename R, typename ...

  10. PagedDataSource数据绑定控件和AspNetPager分页控件结合使用列表分页

    1.引用AspNetPager.dll. 2.放置Repeater数据绑定控件. <asp:Repeater ID="Repeater1" runat="serve ...