技术心得:区间检测(range)

简介: 技术心得:区间检测(range)

"

区间检测(range)

时间限制: 1 Sec 内存限制: 128 MB

题目描述

给定一个长度为n的序列,进行m次检测,每次检测某个区间中,是否有重复的数。

输入

第一行,两个整数n和m,表示序列中元素的个数以及需要检测的次数。

第二行n个元素,表示序列中的元素。

接下来m行,每行两个整数L和R(L≤R),表示需要检测的区间。

输出

对于每个询问,如果这个区间没有重复的数字,输出1,否则输0。

样例

5 2

1 2 3 4 1

1 4

1 5

1

0

提示

对于30%的数据,n和m的范围【1,500】;

对于50%的数据,n和m的范围【1,5000】;

对于80%的数据,n和m的范围【1,50000】,序列中的元素范围【0,105】;

对于100%的数据,n和m的范围【1,500000】,序列中的元素范围【0,109】

这就是题目了

这个我爆蛋了。。。

其实不难,但是我还是写的题目少了

这个题面非常的清晰,就不用再解释了

判断一个区间中有没有相同的数,把他给分割成为子问题,就是判断每一个数在这个区间内有没有相同的数

那么就很自然的想到维护每一个数前面和后面相同的数在什么位置就好了qwq

可是有必要吗awa

只用维护前面的就好了qwq

仔细想想就好了awa

如果这个区间里面有一个数重复了,那么肯定会有一个数前面一个和他相同的数在这个区间中awa

所以就方便多了qwq

pre【i】表示上一个值为A【i】的数出现的//代码效果参考:https://v.youku.com/v_show/id_XNjQwNjYzNjIyNA==.html

位置

题目等价于判断min(pre【L...R】)是否小于L

因为pre【1...L-1】显然是小于L的,所有可以直接判断min(pre【1...R】)是否小于L

快乐

code

#include

#define ll long long

using namespace std;

int n,m,a【5000001】,Max【500001】【30】;

map[span style=""color: rgba(0, 0, 255, 1)"">int,int

inline ll read()

{

char c=getchar();ll a=0,b=1;

for(;c[span style=""color: rgba(128, 0, 0, 1)"">'0'||c>'9';c=getchar())if(c=='-')b=-1;

for(;c>='0'&&c<='9';c=getchar())a=a*10+c-48;

return a*b;

}

ll ask(ll l,ll r)

{

ll k=log2(r-l+1);

return max(Max【l】【k】,Max【r-(1[k)+1】【k】);

}

void work()

{

int t=log2(n);

for(ll j=1;j<=t;j++)

{

for(ll i=1;i<=n-(1[j)+1;i++)

{

Max【i】【j】=max(Max【i】【j-1】,Max【i+(1[(j-1))】【j-1】);

}

}

}

int main()

{

n=read(),m=read();

for(int i=1;i<=n;i++)

{

int val=read();

Max【i】【0】=pre【val】;

pre【val】=i;

}

work();//代码效果参考:https://v.youku.com/v_show/id_XNjQwNjYzNzc4OA==.html

while(m--)

{

int l=read(),r=read();

if(ask(l,r)

else puts(""0"");

}

return 0;

}


"
image.png
相关文章
|
6月前
|
人工智能 物联网 API
又又又上新啦!魔搭免费模型推理API支持DeepSeek-R1,Qwen2.5-VL,Flux.1 dev及Lora等
又又又上新啦!魔搭免费模型推理API支持DeepSeek-R1,Qwen2.5-VL,Flux.1 dev及Lora等
349 7
|
10月前
|
存储 人工智能 Cloud Native
连续四年,稳居第一!
连续四年,稳居第一!
163 1
|
11月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
133 1
C++ 多线程之初识多线程
|
存储 Prometheus 并行计算
10倍性能提升-SLS Prometheus 时序存储技术演进
本文将介绍近期SLS Prometheus存储引擎的技术更新,在兼容 PromQL 的基础上实现 10 倍以上的性能提升。同时技术升级带来的成本红利也将回馈给使用SLS 时序引擎的上万内外部客户。
158839 7
|
11月前
|
搜索推荐 Shell
解析排序算法:十大排序方法的工作原理与性能比较
解析排序算法:十大排序方法的工作原理与性能比较
322 9
|
安全 测试技术 API
API接口知识小结
本文介绍了应用程序接口(API)的基础知识,包括不同类型及其应用场景。首先概述了常见的HTTP请求方法,如GET用于查询信息,POST用于提交数据等。接着解释了同步与异步接口响应机制的区别,前者需等待响应,后者可立即处理下一个请求。此外,文中还探讨了API触发形式,例如分发接口用于主动推送更新,订阅接口则允许系统按需拉取数据。最后,文章列举了API的组成要素,如应用场景、参数定义及错误码,并强调了接口安全性和性能测试的重要性,确保API的稳定与安全运行。
|
监控 安全 算法
室内定位导航技术:数字化时代的智能寻路解决方案
室内定位导航技术融合Wi-Fi、蓝牙信标及超宽带等技术,克服了GPS在室内的局限性。蓝牙信标作为关键组件,通过信号强度分析估算距离,结合三角定位算法确定位置。该技术不仅部署简便、成本低,还能提供准确稳定的定位服务。应用场景包括商场导航、医院科室指引、厂区资产管理、园区安全监控以及智能停车场等,极大提升了用户体验和管理效率。
509 0
室内定位导航技术:数字化时代的智能寻路解决方案
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统自定义业务回写状态的一种新方法(二)
基于若依的ruoyi-nbcio流程管理系统自定义业务回写状态的一种新方法(二)
164 2
|
缓存 网络协议 安全
探秘Netty:打造高性能网络通信利器
探秘Netty:打造高性能网络通信利器
220 0
|
Java Go
Golang深入浅出之-Go语言指针面试必知:理解与使用指针
【4月更文挑战第21天】Go语言中的指针允许直接操作内存,常用于高效数据共享和传递。本文介绍了指针的基础知识,如声明、初始化和解引用,以及作为函数参数使用。此外,讨论了`new()`与`make()`的区别和内存逃逸分析。在结构体上下文中,指针用于减少复制开销和直接修改对象。理解指针与内存管理、结构体的关系及常见易错点,对于面试和编写高性能Go代码至关重要。
340 2

热门文章

最新文章