题目链接:

hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5172

bc(中文):http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=567&pid=1003

题解:

线段树+前缀和

一个区间要满足1到n的一个排列,要同时满足两点,一是它的和是n*(n+1)/2,这个可以用前缀和直接求;二是它每个元素不能重复。

区间内每个元素都不能重复:

  记录第i个元素的左边一个离他最近的值与他相等的数的位置,记在arr[i]里面,对于区间[L,r]要满足区间里面最大的arr[i](L<=i<=r)要小于L;这个可以用线段树或rmq维护。

要先比较第一个条件,即和要先等于n*(n+1)/2,满足了再去查线段树,否则会超时。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lson (o<<1)
#define rson ((o<<1)+1)
#define M (l+(r-l)/2)
using namespace std;
typedef long long LL; const int maxn = 1e6 + ;
LL sumv[maxn << ];
int maxv[maxn << ];
int arr[maxn],vis[maxn];
int n, m; int max(int a, int b) { return a > b ? a : b; } void build(int o, int l, int r) {
if (l == r) {
maxv[o] = arr[l];
}
else {
build(lson, l, M);
build(rson, M + , r);
maxv[o] = max(maxv[lson], maxv[rson]);
}
} int ql, qr;
void query(int o, int l, int r,int &ma) {
if (ql <= l&&r <= qr) {
ma = max(ma, maxv[o]);
}
else {
if (ql <= M) query(lson, l, M,ma);
if (qr > M) query(rson, M + , r, ma);
}
} bool check(int l,int r) {
LL nn = r - l + ;
if (nn*(nn + ) / != sumv[r] - sumv[l - ]) return false;
int ma = -;
query(, , n,ma);
if (ma >= l) return false;
return true;
} void init() {
sumv[] = ;
memset(vis, , sizeof(vis));
} int main() {
while(scanf("%d%d", &n, &m) == && n) {
init();
for (int i = ; i <= n; i++) {
int x;
scanf("%d", &x);
sumv[i] = sumv[i - ] + x;
arr[i] = vis[x];
vis[x] = i;
}
build(,,n);
while (m--) {
scanf("%d%d", &ql, &qr);
LL len = qr - ql + ;
if (check(ql,qr)) {
puts("YES");
}
else {
puts("NO");
}
}
}
return ;
}

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. 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 ...

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

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

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

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

  5. hdu 5172 GTY's gay friends

    GTY's gay friends 题意:给n个数和m次查询:(1<n,m<1000,000);之后输入n个数值(1 <= ai <= n):问下面m次查询[L,R]中是否存在 ...

  6. GTY's gay friends 线段树判断区间是否有相同数字

    http://acm.hdu.edu.cn/showproblem.php?pid=5172 判断一个区间是否为全排列是: 1.区间总和 = (1 + R - L + 1) * (R - L + 1) ...

  7. HDU 3074.Multiply game-区间乘法-线段树(单点更新、区间查询),上推标记取模

    Multiply game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  8. hdu 5274 Dylans loves tree(LCA + 线段树)

    Dylans loves tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  9. HDU 1394 Minimum Inversion Number(线段树求最小逆序数对)

    HDU 1394 Minimum Inversion Number(线段树求最小逆序数对) ACM 题目地址:HDU 1394 Minimum Inversion Number 题意:  给一个序列由 ...

随机推荐

  1. 数据结构08——Trie

    一.什么是Trie? Trie树,一般被称为字典树.前缀树等等,Trie是一种多叉树,这个和二分搜索树.堆.线段树这些数据结构不一样,因为这些都是二叉树.,Trie树除了是一种多叉树,它是一种哈希树的 ...

  2. 嵌入式C语言自我修养 07:地址对齐那些事儿

    7.1 属性声明:aligned GNU C 通过 __atttribute__ 来声明 aligned 和 packed 属性,指定一个变量或类型的对齐方式.这两个属性用来告诉编译器:在给变量分配存 ...

  3. C语言 经典编程100

    一.题目 [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件 ...

  4. Java 访问控制规则简介

    1. 概述 老生常谈的内容 巩固一下自己 要摇摇欲坠的基础 内容确实不怎么高级... 2. 常规解释 1. 概述 简单说下什么情况 在单纯考虑 public, protected, 以及 privat ...

  5. Springboot启动报Multiple Dockets with the same group name are not supported. The following duplicate groups were discovered.

    解决方法: 属于bean重复,根据错误提示剔除多于的Bean引用!

  6. 20155223 2006-2007-2 《Java程序设计》第二周学习总结

    20155223 2006-2007-2 <Java程序设计>第二周学习总结 第三章内容总结 3.1 类型 正如我所预料的情况一样:Java脱胎于C语言,就一定会留有和C语言相近或相同的语 ...

  7. 20155319《Java程序设计》实验三(敏捷开发与XP实践)实验报告

    20155319<Java程序设计>实验三(敏捷开发与XP实践)实验报告 一.实验内容及步骤 (一)使用Code菜单 在IDEA中使用工具(Code->Reformate Code) ...

  8. SaltStack入门篇(七)之架构部署实战

    模块:https://docs.saltstack.com/en/2016.11/ref/states/all/index.html 实战架构图: 实验环境设置: 主机名 IP地址 角色 linux- ...

  9. kyligence enterprise3.2.x版本使用mysql作为数据源构建报错

    1.报错信息如下: exe cmd:null/bin/sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true -Dfs.de ...

  10. C#:设置CefSharp的一些参数,比如忽略安全证书

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本次记录如何设置CefSharp忽略安全证书,以及他的一些其他配置 参考网址: https://peter.s ...