P3901 【数列找不同】
这个题我们可以使用树状数组做
啥? 树状数组? 那个不是维护前缀和的东西吗?
各位看官,让我慢慢道来。
首先我们可以想到,对于一个询问$ [l,r] \(,只有\)[1,r]$中的数可能对这个询问有影响。
这就启示我们可以按照询问的右端点进行一波升序排序。
不过这和树状数组有什么关系呢?
对于同一个数\(x\),假设他在\([1,r]\) 出现了若干次。
对于我们的询问\([l,r]\)来说,只有最靠近\(r\)的\(x\)才最有可能影响到右端点为\(r\)的询问。
所以,我们就只用记录最靠近\(r\)的\(x\)的位置就行了。
那么我们怎么查询一个区间中不同的个数呢?
上文说道,我们只用记录最靠近当前右端点的每个数的位置了。
我们用一个树状数组维护一下。
树状数组中每一个位置就是输入中每一个数的位置。
对于一个数\(x\),他靠近我们当前遍历的右端点的最近一个位置,所对应的树状数组中的数值为1。不是最近的统统为0。
这样的话。对于一个询问\([l,r]\),我们计算一下树状数组中\([l,r]\)中的和。如果和是 \((r-l+1)\)的话,就说\([l,r]\)中所有数都是最靠近\(r\)的,如果不是的话.则说明有重复出现的。
真·凭直觉做题(@某月月赛T1)滑稽。我才不会告诉你我是太蒟蒻了导致什么都不会然后来刷黄题的吗?
类似的题目[SDOI2009]HH的项链](https://www.luogu.org/problemnew/show/P1972)
这个题被某姓毒名瘤字cz的人加强过(暗地%一%),普通莫队会被卡
//Lance1ot
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct node//树状数组
{
int data[101000];
int num;
void updata(int pos,int value)
{
while(pos<=num&&pos)
{
data[pos]+=value;
pos+=(pos&(-pos));
}
return ;
}
int sum(int pos)
{
int res=0;
while(pos)
{
res+=data[pos];
pos-=(pos&(-pos));
}
return res;
}
int check(int l,int r)
{
return sum(r)-sum(l-1);
}
};
node bit;
struct Query
{
int l;
int r;
int num;
}q[101000];//询问
bool compare(const Query &a,const Query &b)
{
return a.r<b.r;
}
int data[101000];//原数组
int ans[101000];
int last[101000];//最近一次出现的位置
int main()
{
int n,m;
scanf("%d%d",&n,&m);
bit.num=n;
for(int i=1;i<=n;i++)
scanf("%d",&data[i]);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&q[i].l,&q[i].r);
q[i].num=i;//离线处理,是第几个询问。
}
sort(q+1,q+1+m,compare);//排序
int Q=1;
for(int i=1;i<=n;i++)
{
bit.updata(last[data[i]],-1);//撤销上一个记录
bit.updata(i,1);//更新
last[data[i]]=i;//保存
while(q[Q].r==i&&Q<=m)//判断当前右端点是否和某个重合
{
if(bit.check(q[Q].l,q[Q].r)==(q[Q].r-q[Q].l+1))//因为是离线算法(fa♂),所以要保存答案
ans[q[Q].num]=1;
else
ans[q[Q].num]=0;
Q+=1;//写成while保险
}
}
for(int i=1;i<=m;i++)
{
if(ans[i]==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
速度还算可以吧。
P3901 【数列找不同】的更多相关文章
- P3901 数列找不同
P3901 数列找不同 题目描述 现有数列 \(A_1,A_2,\cdots,A_N\) ,Q 个询问 \((L_i,R_i)\) , \(A_{Li} ,A_{Li+1},\cdots,A_{Ri} ...
- Luogu P3901 数列找不同
由于技术原因,题目我贴不上了,大家点下面的链接自己去看吧^_^ P3901 数列找不同 这题第一眼看去,题面真短,有坑(flag) 在往下面看去,woc数据这么大,你要怎样. 现在一起想想想,超级侦探 ...
- 【刷题】洛谷 P3901 数列找不同
题目描述 现有数列 \(A_1,A_2,\cdots,A_N\) ,Q 个询问 \((L_i,R_i)\) , \(A_{Li} ,A_{Li+1},\cdots,A_{Ri}\) 是否互不相同 输入 ...
- 洛谷P3901 数列找不同 [莫队]
题目传送门 题目描述 现有数列 A_1,A_2,\cdots,A_NA1,A2,⋯,AN ,Q 个询问 (L_i,R_i)(Li,Ri) , A_{Li} ,A_{Li+1},\cdots, ...
- 洛谷 P3901 数列找不同(莫队)
题目链接:https://www.luogu.com.cn/problem/P3901 这道题简单莫队模板题,然后$add$和$del$分别处理$vis[]$从$0-->1$和从$1--> ...
- 【题解】Luogu P3901 数列找不同
我博客中对莫队的详细介绍 原题传送门 不错的莫队练手题 块数就直接取sqrt(n) 对所有询问进行排序 排序第一关键词:l所在第几块,第二关键词:r的位置 考虑Ai不大,暴力开数组 add时如果加之后 ...
- 【luogu P3901 数列找不同】 题解
对于区间查询的问题,提供一种思路: 莫队. 莫队是处理区间问题的乱搞神器,尤其是对于离线查询问题,当然也可以做在线查询,比如带修莫队. 对于有的题,莫队是乱搞骗分,而在某些地方,莫队是正解. 这道题来 ...
- 洛谷P3901 数列找不同(莫队)
传送门 我不管我不管我就是要用莫队 直接用莫队裸上 //minamoto #include<iostream> #include<cstdio> #include<alg ...
- 洛谷P3901 数列找不同(莫队水题)
重温下手感,判断区间是否全是不同的数字有两种做法,一个长度为len的区间不同的数字,参见HH的项链,一种是区间众数,参见蒲公英,是水题没错了.明天搞数据库,然后继续自己的gre和训练计划 #inclu ...
- 【莫队】【P3901】 数列找不同
Description 现在有一个长度为\(~n~\)的数列\(~A_1~,~A_2~\dots~A_n~\),\(~Q~\)个询问\(~[l_i~,~r_i]~\),每次询问区间内是否有元素相同 I ...
随机推荐
- VMware Workstation 12.5.9 Pro虚拟机软件中文版
更新为 VMware Workstation 12.5.9 pro版.VMware虚拟机软件无疑是windows系统下最强大好用的虚拟机软件.最新的VMware Workstation 12 Pro ...
- ORACLE 12.2 RAC TNS-12520 遭遇连接风爆 (connection storm)
故障现象:数据库迁移到新环境刚过两天.今天生产核心数,断断继续的告警连接不上.这是问题! 如理思路:1.查看alert日志,日志无报错 2.查看连接数,参数设置的20 ...
- 015 3Sum 三个数的和为目标数字
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
- 不要滥用SharedPreference
SharedPreference是Android上一种非常易用的轻量级存储方式,由于其API及其友好,得到了很多很多开发者的青睐.但是,SharedPreference并不是万能的,如果把它用在不合适 ...
- RedHat7配置静态IP
1.验证网络管理器状态,Active: active (running)表示正在运行,一般RHEL7都默认安装了. [root@localhost ~]# systemctl status Netwo ...
- SSM项目spring配置文件详细步骤(分门别类、灵巧记忆)
spring-dao.xml文件 1.配置外部db.property文件: <context:property-placeholder location="classpath:jdbc ...
- BoostrapTable-本地模式(一次性加在所有数据)
直接上代码 数据: [ { "id": "1001", "name": "yyq", "isAdmin&quo ...
- 60、Docker 学习笔记(CentOS 7.1)
#基本概念 -x86_64-minimal.tar.gz | docker import - centos:v7.mini``` 然后查看导入的镜像: ##上传镜像 >用户可以通过 docker ...
- hystrix应用介绍(四)
前几章已经讲了hystrix的应用场景,以及如何使用,本章我们针对如何进行hystrix参数配置做一些分析 //异步的执行 @HystrixCommand(groupKey = "testK ...
- (生产)vuex - 状态管理
参考:https://vuex.vuejs.org/zh-cn/ 安装 直接下载 / CDN 引用 https://unpkg.com/vuex在 Vue 之后引入 vuex 会进行自动安装:< ...