Hdu 5172 GTY's gay friends
题目链接:点击打开链接
题目大意就是,给一段序列,长度为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相关推荐
- HDU 5172 GTY's gay friends 线段树
GTY's gay friends Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 5172 GTY's gay friends HASH随机算法
传送门:点击打开链接 GTY's gay friends Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- HDU 5172 GTY's gay friends 线段树+前缀和+全排列
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5172 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
- HDU 5172 GTY's gay friends (线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5172 题意: 给你一个n个数的数组,m次询问,询问在[L, R] 这个区间里面有没有 [1, R-L+ ...
- hdu 5172 GTY's gay friends(线段树最值)
题意: GTY有n个朋友,站成一排,每个人有一个特征值ai. 有m个询问.每次询问给两个数L,R.问你[L,R](即aL...aR)是否是1..(R-L+1)的一个全排列. 是输出YES,否则输出NO ...
- HDU - 5172 GTY's gay friends
题目链接 题意:n个数m个查询,问[l,r]中的数是否为1到r-l+1的一个排列. 做法1: hash一下,对于[1...n],每个数都随机分配一个hash值,一个集合的hash值为元素异或和.预处理 ...
- 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 ...
- HDU5172 - GTY's gay friends - 哈希
1.题目描述: GTY's gay friends Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- GTY's gay friends
题目链接 英文版 GTY's gay friends Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
最新文章
- meetup_如何使用标准库和Node.js构建Meetup Slack机器人
- Google出品,EfficientNet在目标检测达到最新SOTA | CVPR 2020
- 凸包Graham Scan算法实现
- jaxb-xjc.jar_使用xjc在一秒钟内生成您的JAXB类
- IDEA工具配置weblogic
- 三菱GXWorks2 绘制梯形图
- SI9000阻抗计算安装教程
- protel99实用基础入门教程
- Xmanager4注册码
- 蚁群算法Python实现
- 微信小程序srt_微信小程序商城开发之实现商品加入购物车的功能(代码)
- Windows10的电脑如何查找AppData文件夹
- 是什么限制了你的成功?
- 【Windows】windows10,11系统常用快捷键
- Linux鼠标回报率修改,技术编辑帮您鼠标怎么调回报率
- 人工智能专业适合女孩学习吗?
- 安装Office Visio 提示Office 16 Click-to-Run Extensibility Component
- 如何避免渠道商的“养卡”和“劝弃卡”行为的发生
- 数学图形之单叶双曲面
- Google新动作频出 Google Trends发布