(原创)D-query SPOJ - DQUERY(莫队)统计不同数的数量
A - D-query
Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query is a pair (i, j) (1 ≤ i ≤ j ≤ n). For each d-query (i, j), you have to return the number of distinct elements in the subsequence ai, ai+1, ..., aj.
Input
- Line 1: n (1 ≤ n ≤ 30000).
 - Line 2: n numbers a1, a2, ..., an (1 ≤ ai ≤ 106).
 - Line 3: q (1 ≤ q ≤ 200000), the number of d-queries.
 - In the next q lines, each line contains 2 numbers i, j representing a d-query (1 ≤ i ≤ j ≤ n).
 
Output
- For each d-query (i, j), print the number of distinct elements in the subsequence ai, ai+1, ..., aj in a single line.
 
Example
Input
5
1 1 2 1 3
3
1 5
2 4
3 5 Output
3
2
3
解题思路:这道题就是给你n个数,q次查询,查询l到r区间有多少个不同的数字;此题用莫队算法;
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cmath>
using namespace std; const int maxn = ;
int n ;
int m ;
int a[maxn];
int ans[maxn];
int vis[];
int block[maxn];
int blocksize ;
int count1 = ;
struct query{
int l ;
int r ;
int id ;
}q[maxn];
bool cmp(query a ,query b)
{
if(block[a.l]==block[b.l])
return a.r<b.r;
return block[a.l]<block[b.l];
}
void add(int num)
{
if(vis[a[num]]==)
count1++;
vis[a[num]]++;
}
void remove(int num){
if(vis[a[num]]==)
count1--;
vis[a[num]]--;
}
void solve()
{
int r = ;
int l = ;
for(int i = ; i < m;i++)
{
while(q[i].r > r)
{
r++;
add(r);
}
while(q[i].r<r)
{
remove(r);
r--;
}
while(q[i].l>l)
{
remove(l);
l++;
}
while(q[i].l<l)
{
l--;
add(l);
}
ans[q[i].id] = count1;
}
}
int main()
{
scanf("%d",&n);
blocksize = sqrt(n);
for(int i = ; i <= n ; i++)
{
scanf("%d",&a[i]);
block[i] = (i-)/blocksize + ;
}
scanf("%d",&m);
for(int i = ; i < m;i++)
{
scanf("%d%d",&q[i].l,&q[i].r);
q[i].id = i;
}
sort(q,q+m,cmp);
solve();
for(int i = ; i < m ;i++ )
{
printf("%d\n",ans[i]);
}
return ;
}
(原创)D-query SPOJ - DQUERY(莫队)统计不同数的数量的更多相关文章
- SPOJ - DQUERY 莫队
		
题意:给定\(a[1...n]\),\(Q\)次询问,每次统计\([L,R]\)范围内有多少个不同的数字 xjb乱写就A了,莫队真好玩 #include<iostream> #includ ...
 - SPOJ  DQUERY - D-query (莫队算法|主席树|离线树状数组)
		
DQUERY - D-query Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query ...
 - SPOJ - FREQ2 莫队 / n^1.5logn爆炸
		
题意:给定\(a[1...n]\)和\(Q\)次询问,每次统计\([L,R]\)范围内出现频率最高的数的次数 想法没啥好说的,分别统计该数出现的次数和次数出现的次数,然后莫队暴力 注意本题时间卡的很紧 ...
 - SP3267 DQUERY - D-query  莫队板子题
		
题意可见:https://www.luogu.com.cn/problem/SP3267 可在vj上提交:https://vjudge.net/problem/SPOJ-DQUERY 题意翻译 给出一 ...
 - D-query SPOJ - DQUERY(莫队)统计不同数的数量
		
Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query is a pair (i, j) ...
 - SPOJ DQUERY 求区间内不同数的个数 主席树
		
这题跟HDU3333差不多吧. 离线的做法很简单,不再说了 以前做过. 主席树的做法就比较暴力了.. 什么是主席树呢.. 其实是某种称号. 在该题中的体现是可持久化的线段树. 对于一个数 如果以前没出 ...
 - 【带修莫队】bzoj2120 数颜色
		
块大小为n2/3. 把询问和修改分开. 每次两个询问之间的修改进行暴力转移,如果修改在上一次询问的区间里,就会对当前状态形成影响. 好慢. #include<cstdio> #includ ...
 - Luogu2336 SCOI2012 喵星球上的点名 SA、莫队
		
传送门 一道很套路的题目 先将所有串拼在一起,两个不同的串之间放一个没有出现在任何串中的字符做分隔,然后SA 那么对于所有点名串能够点到的名字串在SA中对应一段区间 把这些区间拿出来然后莫队统计每一个 ...
 - P1903 [国家集训队]数颜色 / 维护队列    带修改莫队
		
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
 
随机推荐
- 蓝桥杯 算法训练 ALGO-150 6-1 递归求二项式系数值
			
算法训练 6-1 递归求二项式系数值 时间限制:10.0s 内存限制:256.0MB 问题描述 样例输入 一个满足题目要求的输入范例.3 10 样例输出 与上面的样例输入对应的输出. 数据 ...
 - POJ3258(最大化最小值)
			
River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11155 Accepted: 4785 ...
 - c# OrderBy 实现List升序降序
			
本文转载自:http://blog.csdn.net/chadcao/article/details/8730132 1)前台代码 <%@ Page Language="C#" ...
 - Windows命令行操作MySQL
			
使用命令行操作mysql的一些简单步骤: //进入MySQL数据库 > mysql -hlocalhost -uroot -p//显示 所有数据库 > show databa ...
 - 机器学习:SVM(SVM 思想解决回归问题)
			
一.SVM 思想在解决回归问题上的体现 回归问题的本质:找到一条直线或者曲线,最大程度的拟合数据点: 怎么定义拟合,是不同回归算法的关键差异: 线性回归定义拟合方式:让所有数据点到直线的 MSE 的值 ...
 - 手机的RAM和ROM
			
RAM是由英文Random Access Memory的首字母构成的,意为随机存储器,即在正常工作状态下可以往存储器中随时读写数据.根据存储单元工作原理的不同,RAM又可分为静态存储器(SRAM)和动 ...
 - javascript——对象的概念——函数 3 (使用技巧)
			
1.回调函数:将函数A传给函数B,由函数B来执行A,则称A为回调函数. 例1: 例2 function addone(a){;}; //定义一个回调函数 function mulitiply(a,b, ...
 - 12-19Windows窗体应用程序之记事本(2)
			
之前记事本的功能实现了“文件”和“编辑”中的功能操作,现在再继续下面的功能介绍: 3) <1>字体设置 [查看代码] [效果图] <2>字体颜色的设置 [查看代码] [效果图] ...
 - 安卓SQLite数据库操作(下)
			
在安卓开发中,数据库的操作无非就是增删改查.那么,这里我们通过例子来学习这四个操作. 我们先看代码吧.具体讲解后面说. 布局文件 activity_main.xml <LinearLayout ...
 - PHP数组函数的使用
			
1.array_walk($arr, $func, [$data]) 使用用户自定义的函数遍历所有的元素,返回true/false $func是一个函数名 默认会传入两个参数 第一个 $arr的值, ...