区间不同数

金牌导航 莫队-1

题目大意

给出n个数,然后询问m次,每次询问一个区间内不同的数的个数

样例输入

6
1 2 3 4 3 5
3
1 2
3 5
2 6

样例输出

2
2
4

数据范围

1⩽n⩽5×104,1⩽m⩽2×105,0⩽ai⩽1061\leqslant n\leqslant 5\times 10^4,1\leqslant m\leqslant 2\times 10^5,0\leqslant a_i\leqslant 10^61⩽n⩽5×104,1⩽m⩽2×105,0⩽ai​⩽106

解题思路

先将原序列分块,然后对每个查询进行排序,排序以左端点所在块为第一关键字,以右端点为第二关键字
然后每次在上一个查询的前提下进行查询
分块和莫队有效降低了时间复杂度,使时间复杂度是O(nn)O(n\sqrt{n})O(nn​)

代码

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 50010
#define M 200021
#define NN 1000010
using namespace std;
int n, m, w, g, l, r, s[N], p[NN], ans[M];
struct node
{int v, b, l, r;
}a[M];
bool cmp(node a, node b)
{return a.b < b.b || a.b == b.b && a.r < b.r;
}
int main()
{scanf("%d", &n);g = sqrt(n);for (int i = 1; i <= n; ++i)scanf("%d", &s[i]);scanf("%d", &m);for (int i = 1; i <= m; ++i){scanf("%d%d", &a[i].l, &a[i].r);a[i].v = i;a[i].b = (a[i].l - 1) / g + 1;//所在块}sort(a + 1, a + 1 + m, cmp);for (int i = 1; i <= m; ++i){while(l < a[i].l) if (!--p[s[l++]]) w--;//移动指针while(l > a[i].l) if (!p[s[--l]]++) w++;while(r < a[i].r) if (!p[s[++r]]++) w++;while(r > a[i].r) if (!--p[s[r--]]) w--;ans[a[i].v] = w;}for (int i = 1; i <= m; ++i)printf("%d\n", ans[i]);return 0;
}

【莫队】区间不同数(金牌导航 莫队-1)相关推荐

  1. 【分块】区间众数(金牌导航 分块-1)

    区间众数 金牌导航 分块-1 题目大意 给出一个数列,和若干询问,每个询问让你求一个区间内的众数 输入样例 6 3 1 2 3 2 1 2 1 5 3 6 1 5 输出样例 1 2 1 数据范围 1⩽ ...

  2. 【整体二分】区间第k小(金牌导航 整体二分-1)

    区间第k小 金牌导航 整体二分-1 题目大意 给出一个序列,有若干查询,每次查询给出l,r,k,让你求l~r这个区间的第k大 输入样例 7 3 1 5 2 6 3 7 4 2 5 3 4 4 1 1 ...

  3. 【ybt金牌导航8-7-1】数对统计 / 关于莫比乌斯函数的少量内容

    数对统计 题目链接:ybt金牌导航8-7-1 题目大意 给你 n,m,求 gcd(x,y)=1 的数对个数. 1<=x<=n,1<=y<=m 思路 莫比乌斯函数 什么东西 首先 ...

  4. 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)

    正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...

  5. 【DP】【树状数组】折线统计(金牌导航 数据结构优化DP-1)

    正题 金牌导航 数据结构优化DP-1 题目大意 平面上有n个点,让你选择若干点,连接x坐标相邻的点,其中连续上升或下降的为一段,问你有多少中选择方案,使得段数为k 解题思路 设fi,j,0/1f_{i ...

  6. 【LCT】城市旅行(luogu 4842/金牌导航 LCT-3)

    正题 luogu 4842 金牌导航 LCT-3 题目大意 给你一棵树,让你进行一些操作: 1.删除一条边 2.连接一条边 3.给一条路径上的点加上x 4.给出一条路径,在该路径选取两个点,求这两个点 ...

  7. 【线性基】彩灯(luogu 3857/金牌导航 线性基-1)

    彩灯 luogu 3857 金牌导航 线性基-1 题目大意 给若干个01串,让你选择其中一些,问你异或的值有多少种 输入样例 2 3 OO XO OX 输出样例 4 数据范围 1⩽N,M⩽501\le ...

  8. 【启发式合并】梦幻布丁(金牌导航 启发式合并-1/luogu 3201)

    梦幻布丁 金牌导航 启发式合并-1 luogu 3201 题目大意 有若干个布丁,给出它们的颜色,每次将一个颜色的所有布丁变成另一种颜色,然后询问有多少段连续的数 输入样例 4 3 1 2 2 1 2 ...

  9. 【FHQ treap】维护书架(金牌导航 无旋式treap-1)

    维护书架 金牌导航 无旋式treap-1 题目大意 给出一个序列a,编号为1~n,让你做若干操作,操作有五种: 1.把第x个数放在最前面 2.把第x个数放在最后面 3.把第x个数和第x±1x\pm 1 ...

最新文章

  1. Andrej Karpathy发文谈神经网络:这不仅仅是分类器,这是一种新的软件开发思想
  2. php调取 zabbix实时数据_zabbix-基础系列(三)-zabbix安装[官方版]
  3. 单例模式 GetInstance()
  4. matlab连续信号离散化_MATLAB开发自动驾驶第八课-控制信号帧的回放以进行标签化处理...
  5. NSURLProtocol概述
  6. 你是外包,麻烦不要偷吃零食,注意素质...
  7. python使用request发送post请求_python之使用request模块发送post和get请求
  8. Linux系统编程 -- stdin stdout stderr
  9. 《Head First》 MVC运用的设计模式
  10. 微波遥感几个重要公式
  11. python 日本 地图 热力图_【python实战】热力图——百度地图API
  12. 华为云influxdb+grafana+ prometheus安装和如何外网访问华为云+java环境安装配置+jmeter安装配置+Jmeter后端监听器+非GUI执行jmeter脚本
  13. ubuntu与windows双系统的启动项丢失
  14. turtle科赫雪花的源码分析
  15. windows下pip下载库速度慢
  16. 腾讯、抖音、陌陌们都在关注视频社交,可能找错了未来社交的方向
  17. 中兴光猫F460 V3.0破解,断了电信的远程管理,禁止电信光猫外网登录超级管理员,有效去除被黑的烦恼...
  18. 案例1:人生重开模拟器(Python)——直接带你入门~
  19. 华为交换机路由器例行维护(巡检)方法参考
  20. OpenMV IDE安装使用教程

热门文章

  1. android ble status,Android BLE peripheral disconnects with status code BLE_HCI_INSTANT_PASSED(0x28)
  2. word2vec原理_word2vec论文阅读笔记
  3. java实用教程——常用实用类——String类(字符串类)
  4. Java substring() 方法
  5. [JavaWeb-MySQL]MySQL登陆和退出
  6. [Java基础]Map集合基础
  7. LeetCode 563二叉树的坡度-简单
  8. [蓝桥杯2018决赛]换零钞-枚举
  9. [蓝桥杯2017决赛]数位和-模拟(水题)
  10. 下一代微服务架构基础:ServiceMesh?