题目链接:点击打开链接

题目大意就是,给一段序列,长度为10^5,然后有10^5个询问,每次询问为一个区间,l为左边界,r为右边界,该区间是否为一个1到r-l+1的一个排列,即该区间是否满足包含1到r-l+1的所有元素。

分析一下,如果一个长度为n的区间包含从1到n的所有元素,那么在该区间之内,1到n的元素每个只出现一次,而且这个区间和应该为n(n+1)/2。第二个条件只需要处理前缀和即可,第一个条件则需要查重。

第一个我用的是线段树,每一个位置记录一下当前元素出现的上一个位置在哪里,然后以记录为元素建线段树,线段树的每个节点保存当前区间里重复出现的最后一个位置,对于查询只需要看重复位置是否出现在区间之内。

貌似出题人还提出一种哈希查重的方法,给1到n个元素随机一个哈希值,用集合元素的异或和作为哈希值,预处理出前n个元素的哈希值,然后o(1)查重...个人感觉存在满足哈希值相同且和相同的两个集合...用以自身为哈希值的方法交了一发,在一个大数据前面wa了,应该是个不稳定的方法...

#include <iostream>
#include <stdio.h>
#include <string.h>using namespace std;
#define N 1000010
#define ls rt << 1
#define rs rt << 1 | 1
#define LL long long
struct node{int l,r;int pre;
}T[N<<2];
LL sum[N];
int pre[N],now[N];void Pushup(int rt){T[rt].pre = max(T[ls].pre , T[rs].pre);
}void build(int l,int r,int rt){T[rt].l = l;T[rt].r = r;if(l == r){T[rt].pre = now[l];return ;}int m = (l + r) >> 1;build(l,m,ls);build(m + 1,r,rs);Pushup(rt);
}LL SUM(int l,int r){LL a = r - l + 1,ret;ret = ((LL)1+a)*a/(LL)2;return ret;
}int query(int l,int r,int rt){if(l <= T[rt].l && T[rt].r <= r){return T[rt].pre;}int ret = -1;if( l <= T[ls].r ) ret = query(l,r,ls);if( r >= T[rs].l) ret = max(ret, query(l,r,rs));return ret;
}int main()
{int n,m,t,l,r;LL ans;sum[0] = 0;while(~scanf("%d%d",&n,&m)){memset(pre,-1,sizeof(pre));for(int i=1;i<=n;i++){scanf("%d",&t);if(i==1){sum[i] = t;}else sum[i] = sum[i - 1] + (LL)t;// printf("%I64d ",sum[i]);//shanif(pre[t] == -1){now[i] = -1;pre[t] = i;}else{now[i] = pre[t];pre[t] = i;}}//printf("\n");// shanbuild(1,n,1);//printf("1\n");for(int i=0;i<m;i++){scanf("%d%d",&l,&r);ans = sum[r] - sum[l - 1];if(ans == SUM(l,r)){ans = query(l,r,1);if(ans >= l){printf("NO\n");}else {printf("YES\n");}}else{printf("NO\n");}}}return 0;
}

Hdu 5172 GTY's gay friends相关推荐

  1. HDU 5172 GTY's gay friends 线段树

    GTY's gay friends Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  2. HDU 5172 GTY's gay friends HASH随机算法

    传送门:点击打开链接 GTY's gay friends Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  3. HDU 5172 GTY's gay friends 线段树+前缀和+全排列

    题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5172 bc(中文): http://bestcoder.hdu.edu.cn/contes ...

  4. HDU 5172 GTY's gay friends (线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5172 题意: 给你一个n个数的数组,m次询问,询问在[L, R] 这个区间里面有没有 [1, R-L+ ...

  5. hdu 5172 GTY's gay friends(线段树最值)

    题意: GTY有n个朋友,站成一排,每个人有一个特征值ai. 有m个询问.每次询问给两个数L,R.问你[L,R](即aL...aR)是否是1..(R-L+1)的一个全排列. 是输出YES,否则输出NO ...

  6. HDU - 5172 GTY's gay friends

    题目链接 题意:n个数m个查询,问[l,r]中的数是否为1到r-l+1的一个排列. 做法1: hash一下,对于[1...n],每个数都随机分配一个hash值,一个集合的hash值为元素异或和.预处理 ...

  7. BestCoder Round #29 1003 (hdu 5172) GTY's gay friends [线段树 判不同 预处理 好题]

    传送门 GTY's gay friends Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  8. HDU5172 - GTY's gay friends - 哈希

    1.题目描述: GTY's gay friends Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  9. GTY's gay friends

    题目链接 英文版 GTY's gay friends Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

最新文章

  1. meetup_如何使用标准库和Node.js构建Meetup Slack机器人
  2. Google出品,EfficientNet在目标检测达到最新SOTA | CVPR 2020
  3. 凸包Graham Scan算法实现
  4. jaxb-xjc.jar_使用xjc在一秒钟内生成您的JAXB类
  5. IDEA工具配置weblogic
  6. 三菱GXWorks2 绘制梯形图
  7. SI9000阻抗计算安装教程
  8. protel99实用基础入门教程
  9. Xmanager4注册码
  10. 蚁群算法Python实现
  11. 微信小程序srt_微信小程序商城开发之实现商品加入购物车的功能(代码)
  12. Windows10的电脑如何查找AppData文件夹
  13. 是什么限制了你的成功?
  14. 【Windows】windows10,11系统常用快捷键
  15. Linux鼠标回报率修改,技术编辑帮您鼠标怎么调回报率
  16. 人工智能专业适合女孩学习吗?
  17. 安装Office Visio 提示Office 16 Click-to-Run Extensibility Component
  18. 如何避免渠道商的“养卡”和“劝弃卡”行为的发生
  19. 数学图形之单叶双曲面
  20. Google新动作频出 Google Trends发布

热门文章

  1. Arya-专业web自动化测试平台
  2. HMS Core 机器学习服务6.4.0版本更新啦,文本翻译功能增加10种小语种语言类型
  3. 爬虫Scrapy安装笔记
  4. 银河麒麟常见问题汇总
  5. Joda-Time使用参考
  6. 车载信息服务软件开发包使用指南(20)
  7. 谷歌 zx 脚手架模块中文文档
  8. 2021年化工自动化控制仪表作业考试题库及化工自动化控制仪表操作证考试
  9. 撸一个自定义底部导航View 布局+代码实现导航栏
  10. 苹果研发卫星技术,Facebook自建操作系统,Uber推空中出租车 | 科技前沿周报